[Tutor] Retrieving information from a plain text file (WinXP/py2.6.2/Beginner)

Katt the_only_katala at verizon.net
Mon Nov 2 00:37:50 CET 2009


Hello all,

Thank you all for your help.  I appreciate it alot.

I have been trying to work with file IO alot recently and would like to 
improve my little program so that I no longer use a hard coded list, but a 
text file that I can edit easily.

The text file is three lines long and looks exactly like this:

Reminder1,2009_10_28
Reminder2,2009_11_01
Reminder3,2009_11_15

My program consists of the following code:
============
#]------------------[import modules]------------------[
from time import strftime, mktime, localtime
from WConio import textcolor
#]--------------------------------------------------------[
#]------------------[define functions]------------------[
def read_reminders():
    print "\nReading text file into program: reminders.txt"
    text_file = open("reminders.txt","r")
    reminders = [line.strip().split("'") for line in text_file]
    text_file.close()
    print reminders
#
def get_computer_date():
    #Get today's date from the computer
    todays_date = strftime("%Y_%m_%d")
    return todays_date
#
def color_print(strings):
    #Change the text color in the WinXP dos shell
    #The way to use:
    #color_print([("string",color number),\
    #(str(variable),color number),(etc)])
    for string in strings:
        textcolor(string[1])
        print string[0],
#
def change_to_julian(reminder_date):
    #Receives the year, month, and day
    #in the form of a single string (2009_10_15)
    #and changes it into three different int
    #variables.  Then take those three variables
    #and append six zeros and change into a
    #julian date.
    date = []
    date = reminder_date.split("_")
    year = int(date[0])
    month = int(date[1])
    day = int(date[2])
    timetuple = (year, month, day) + ( (0,) * 6 )
    unixtime = mktime(timetuple)
    timetuple = localtime(unixtime)
    print days_left(timetuple[7])
    # [7] is the number of julian-date field of
    #the unixtime tuple.
    return days_left(timetuple[7])
#
def days_left(julian_date):
    #This function calculates the days left
    #until a reminder.  If the days left are
    #greater than 0 it will print normally.
    #If it is -1 then it will print differently.
    #Also if it is greater than -1 it will print
    #yet again differently.
    days_until_reminder = julian_date - localtime().tm_yday
    if days_until_reminder > 0:
        color_print ([("There are",7),(str(days_until_reminder),4),("days 
left until this reminder.",7),("\n",7)])
    elif days_until_reminder == -1:
        color_print ([("\tYou have missed this reminder 
by",4),(str(days_until_reminder*-1),4),("day!",4),("\n",7)])
        color_print 
[("  ------------------------------------------------------------------------",4),("\n",7)])
    else:
        color_print ([("\tYou have missed this reminder 
by",4),(str(days_until_reminder*-1),4),("days!",4),("\n",7)])
        color_print 
[("  ------------------------------------------------------------------------",4),("\n",7)])
print
#
def compare_reminders(todays_date):
    #This function compares the reminders
    #to the computer date.
    #It has three different paths:
    # 1.Matches today's date
    # 2.The reminder date has already
    #  passed by
    # 3.The reminder date is yet to
    #  come.
    #After determining which it is it will
    #access the change_to_julian and
    #days_left functions.
    #reminders.sort()
    color_print ([(" 
[-------------------------------------------------------------------------]",4),("\n",7)])
    index = 0
    while index < len(reminders):
        if todays_date == reminders[index][1]:
            print
            color_print 
[("  ------------------------------------------------------------------------",4),("\n",7)])
            print "Today's reminder is: 
",reminders[index][0],"on",reminders[index][1]
            color_print ([("\t\tTake care of this reminder 
immediately",2),("\n",7)])
        elif todays_date > reminders[index][1]:
            print
            print "Whoops, you missed the following 
reminder.",reminders[index][0],"on",reminders[index][1]
            change_to_julian(reminders[index][1])
        else:
            print
            print "Your upcoming reminders are: 
",reminders[index][0],"on",reminders[index][1]
            change_to_julian(reminders[index][1])
        index = index + 1
    color_print ([(" 
[-------------------------------------------------------------------------]",4),("\n",7)])
#]--------------------------------------------------------[
#]-------------------[Main Program]-------------------[
read_reminders()
print reminders
compare_reminders(get_computer_date())
pause_it = raw_input("Press a key to end: ")
#]--------------------------------------------------------[
============
Could someone explain to me why my read_reminders function retrieves the 
information, but cannot process that information?

When I try and run the program I get the following error message:
============
Reading text file into program: reminders.txt
[['Reminder1,2010_10_15'], ['Reminder2,2010_11_01'], 
['Reminder3,2010_11_15']]
Traceback (most recent call last):
    File "reminders.py", line 182, in <module>
        print reminders
NameError: name 'reminders' is not defined
============

Thanks in advance for your help,

Katt 



More information about the Tutor mailing list