如何让我的程序读取它刚刚对文本文件所做的更新?

2024-04-18 11:39:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Python是全新的(5个小时前才开始),但是我有一年的Java经验。不管怎样,我想做的第一个程序就是创建一个名字/生日的“日志”。它会提示用户输入条目数,然后输入姓名和出生日期。这是相当简单,工作良好。每次运行该程序时,它都会将新的姓名/出生日期附加到文本文件中,以便以前的姓名/出生日期保持不变,新的姓名/出生日期显示在最后。然而,我想能够排序这些条目的姓氏。我成功地创建了一种按姓氏对它们进行排序的方法(同样也不复杂),但是只有当它是自己的独立程序时,它才能工作。如果将代码放在原始程序的末尾,它将按预期进行排序,但不会对程序中的任何新条目进行排序,只对上次运行程序时的条目进行排序。我确实关闭了文件并在代码中重新打开了它,但是它仍然无法识别所做的更改。因为这两个程序本身都能正常工作,我需要做什么才能在同一个程序中实现这两段代码?或者,是否有办法从第一个程序运行第二个程序?你知道吗

这是我的程序代码(生日.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

Tags: 程序txt排序count出生日期write姓名print
1条回答
网友
1楼 · 发布于 2024-04-18 11:39:06

问题在于:

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)
    # ...

相关问题 更多 >