我正在尝试将数据附加到文件中。每行都写在函数内。以下是基于我的实际代码的示例代码:
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
函数时,如何在文件末尾添加新行?
答案 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()
操作会在该文件的开头插入这些数字。这是因为没有关闭。这些变化发生在记忆中,并且尚未被写入磁盘。