2013-08-29 2 views
0

Я совершенно новый для Python (только начал его 5 часов назад), но у меня есть год опыта работы с Java. В любом случае, первая программа, которую я хотел сделать, создала бы своего рода «журнал» имен/дней рождения. Он запрашивает у Пользователя количество записей, затем имена и даты рождения. Это довольно просто и отлично работает. Каждый раз, когда вы запускаете программу, она добавляет новые имена/даты рождения в текстовый файл, поэтому предыдущие имена/даты рождения остаются неповрежденными, а новые появляются в конце. Однако я хотел иметь возможность сортировать эти записи по фамилии. Я успешно создаю способ сортировки их по фамилии (опять же, не для сложного), но он работает только в том случае, если это отдельная программа. Если я поместил код в конце моей оригинальной программы, он будет сортироваться так, как ожидалось, однако он не будет сортировать какие-либо новые записи, сделанные в программе, только записи из последнего запуска программы. Я закрыл файл и снова открыл его в коде после того, как были сделаны записи, однако он все равно не распознает сделанные изменения. Поскольку обе программы функционируют должным образом самостоятельно, что мне нужно сделать, чтобы реализовать эти две части кода в одной и той же программе? В качестве альтернативы, будет ли способ запустить вторую программу из первой программы?Как я могу читать свою программу, обновленную в текстовом файле?

Вот мой код программы (BirthDates.txt это текстовый файл, были записи хранятся):

#IDLE 1.2.4 
#Begin Entries  
fileobja=open("BirthDates.txt","a") 
dates=int(raw_input("Number of entries to add:")) 
count=0 
while count<dates: 
    fileobja.write("*NEW ENTRY*") 
    firstName=raw_input("Enter user's first name:") 
    lastName=raw_input("Enter user's last name:") 
    DOB=raw_input("Enter user's date of birth (MM/DD/YYYY):") 
    print lastName+","+firstName+"\n"+DOB 
    fileobja.write("\n") 
    fileobja.write(lastName+", "+firstName+"\n") 
    fileobja.write("("+DOB+")"+"\n"+"__________\n") 
    #print "dates=",dates 
    #print "count=",count 
    count=count+1 
    #print "count=",count 
    fileobja.close 
    #End Entries 

Это вторая программа:

#Begin Sorter 
fileobjr=open("Birthdates.txt","r") 
fileList=[] 
tempString="" 
tempStringCount=0 
for line in fileobjr: 
    tempString="".join(line[0:]) 
    #print "tempString="+tempString 
    fileList.append(tempString) 
    tempStringCount=tempStringCount+1 
fileobjr.close 
fileListLength=len(fileList) 
#print fileListLength 
chunks=(fileListLength)/4 
sortCount=1 
tempList=[] 
while sortCount<fileListLength: 
    templine=fileList[sortCount]+fileList[sortCount+1] 
    tempList.append(templine) 
    sortCount=sortCount+4 
writeCount=0 
tempList.sort() 
fileobjw=open("BirthDates.txt","w") 
while writeCount<chunks: 
    #print tempList[writeCount] 
    fileobjw.write("*NEW ENTRY*\n") 
    fileobjw.write(tempList[writeCount]) 
    fileobjw.write("__________") 
    fileobjw.write("\n") 
    writeCount=writeCount+1 
fileobjw.close 
#End Sorter 

ответ

4

Проблема здесь:

fileobja.close 

... и несколько подобных линий.

Вы не , вызывающий метод close, вы просто ссылаетесь на него как на ценность. Таким образом, файл не закрывается, что означает, что он не очищается, что означает, что все, что вы ему написали, может быть недоступно для чтения.

Чтобы исправить это, просто вызовите метод:

fileobja.close() 

В качестве примечания, как правило, легче использовать with заявление, которое заботится о закрытии файла при выходе из блока внутри Это. (Это как магия попробовать/наконец-то.) Вместо этого:

f = open('foo', 'a') 
do_stuff(f) 
do_more_stuff(f) 
# ... 
f.close() 

ли это:

with open('foo', 'a') as f: 
    do_stuff(f) 
    do_more_stuff(f) 
    # ... 
Смежные вопросы