将数据附加到python中的文件末尾

时间:2016-11-12 10:10:00

标签: python function file append

我正在尝试将数据附加到文件中。每行都写在函数内。以下是基于我的实际代码的示例代码:

a = 0

def data():
    global a
    a = int(raw_input('Enter value for a\n>'))
    write()

def write():
    f = open('path\\to\\file.txt', "a")
    f.write('%s\n' % a)
    f.close
    proceed()

def proceed():
    should = raw_input('Please press enter to continue or type in 0 to stop\n>')
    if should == '0':
        return
    else:
        data()

data()

当我运行代码并将1, 2 and 3作为a的值时,这就是它写入文件的方式:

3
2
1

但我希望以这种方式写入文件:

1
2
3

这样做的正确方法是什么?每次运行write函数时,如何在文件末尾添加新行?

2 个答案:

答案 0 :(得分:2)

您的程序结构可能会导致非常深的递归(问题)。因为在data()中,你调用write(),在write()中调用proceed(),在proceed()中再次调用data()。尽量避免这种结构。以下代码可以避免此问题,并且更短:

def data():
    while True:
        a = int(raw_input('Enter value for a\n>'))
        f.write(str(a) + '\n')

        should = raw_input('Please press enter to continue or type in 0 to stop\n>')
        if should == 0:
            break


f = open('path\\to\\file.txt', "a")
data()
f.close()

答案 1 :(得分:1)

@Ukimiku已经给出了实施要求的正确方法。 至于为什么你的代码表现如此,我的意见就在这里。 实际上,使用open('path','a')打开文件会将文件指针移动到您打开的文件的末尾,这样当您使用write()时,您会附加一些内容。

f = open('path\\to\\file.txt', "a")
print f.tell() #get the position of current file pointer
f.write('%s\n' % a)

打开file.txt后添加print f.tell()。每次打开它时都会发现,指针位置始终为0,这表示您的write()操作会在该文件的开头插入这些数字。这是因为没有关闭。这些变化发生在记忆中,并且尚未被写入磁盘。