在python中显示更新的文本文件

时间:2011-12-09 16:07:13

标签: python

下面是我的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

我认为如果输入是“预览”,它应该显示已保存新条目的修改文件,但它不会。任何想法都这样做。

4 个答案:

答案 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')每次都在循环内移动