下面是我的python代码:
filename = 'ToDo.txt'
def preview():
temp = open(filename, 'r')
print temp.read()
print '\n'
temp.close
def new_task():
temp = open(filename, 'a')
while True:
new_entry = raw_input('Enter New Task: ')
if new_entry == 'exit' or new_entry == 'quit':
break
if new_entry == 'preview':
print '\n'
preview()
break
temp.write(new_entry + '\n')
temp.close
我认为如果输入是“预览”,它应该显示已保存新条目的修改文件,但它不会。任何想法都这样做。
答案 0 :(得分:3)
EDIT2:看到其他答案,我意识到您的问题可能会以多种不同方式解释。我的答案的第一部分可能是也可能不是正确的,但第二部分是解释中立的!
此答案假设您尝试将“预览”视为文件的最后一行。
它不起作用,因为您在保存之前正在加载和打印文件。尝试使用以下代码替换代码的相关位:
if new_entry == 'preview':
temp.write(new_entry + '\n')
temp.close()
print '\n'
preview()
break
编辑:如果您正在对文件进行大量读/写/打印/预览,您可能有兴趣查看StringIO
module。来自文档:
该模块实现了一个类文件类StringIO,它读写字符串缓冲区(也称为内存文件)。
在这种情况下的想法是你在内存中完成所有文件处理,在退出程序之前,你只需将整个“内存文件”保存到“磁盘文件”。更喜欢这种方法的原因是磁盘上的I / O操作很昂贵,所以如果你这么做很多,你可能会把你的程序弄糟[我理解ToDo程序可能不是这样,但我觉得它很有趣提到。
HTH!
答案 1 :(得分:2)
您实际上并未调用任何功能:
filename = 'ToDo.txt'
def preview():
temp = open(filename, 'r')
print temp.read()
print '\n'
temp.close
def new_task():
temp = open(filename, 'a')
while True:
new_entry = raw_input('Enter New Task: ')
if new_entry == 'exit' or new_entry == 'quit':
break
if new_entry == 'preview':
print '\n'
preview()
break
temp.write(new_entry + '\n')
temp.close
new_task() //adding this line will call the new_task() function
在python中调用一个函数,你需要在py文件的底部显式地说明它
答案 2 :(得分:0)
该计划有temp.close
。这不是调用close()的正确方法;因此temp.write不会立即完成。您需要temp.close()
。
答案 3 :(得分:0)
您应该将代码更改为:
def new_task():
while True:
temp = open(filename, 'a')
new_entry = raw_input('Enter New Task: ')
if new_entry == 'exit' or new_entry == 'quit':
break
if new_entry == 'preview':
print '\n'
preview()
break
temp.write(new_entry + '\n')
temp.close()
这里有两处变化:
temp.close
,而是temp.close()
temp = open(filename, 'a')
每次都在循环内移动