将两个变量写入for循环内的文件

时间:2014-06-04 07:35:30

标签: python-2.7

我想使用Python将两个变量写入for循环内的文件。 这是最低工作实例(MWE)

for kk in range(1,10):
    vr = kk+1
    vm = kk+2
    f = open('vr_vm.txt','w')
    f.write("%s %s\n" % (vr, vm))
    f.close()

我的问题是每次代码覆盖以前写的行。我怎么能摆脱这个呢? 感谢

3 个答案:

答案 0 :(得分:1)

' W'表示"具有相同名称的现有文件将被删除"

您需要将其更改为' a'这是追加模式

这应该有效

for kk in range(1,10):
    vr = kk+1
    vm = kk+2
    f = open('vr_vm.txt','a')
    f.write("%s %s\n" % (vr, vm))
    f.close()

有关详细信息,请使用此python docs

虽然它不是最好的解决方案。如果你可以在循环之外移动文件打开和关闭也应该有效。

f = open('input.txt', 'w')// 'w' if you dont want to append your data
for kk in range(1, 10):
    vr = kk + 1
    vm = kk + 2
    f.write("%s %s\n" % (vr, vm))

f.close()

答案 1 :(得分:1)

在每次迭代中,您打开关闭文件会发生什么。在迭代结束时,文件将被关闭。然后,在下一次迭代中,它将再次打开,此过程将 clean 该文件(其内容被删除)。然后在空文件中写入变量值。

因此循环后的内容文件只是最后写入的值。

如何解决?只需将openclose来电置于循环之外:

f = open('vr_vm.txt.txt', 'w')

for kk in range(1, 10):
    vr = kk + 1
    vm = kk + 2
    f.write("%s %s\n" % (vr, vm))

f.close()

注意:建议使用with open(...) as ...:语法打开文件。这将隐式关闭文件。

with open('input.txt', 'w') as f:
    for kk in range(1, 10):
        vr = kk + 1
        vm = kk + 2
        f.write("%s %s\n" % (vr, vm))

答案 2 :(得分:1)

它不会覆盖前一行。每次以写入模式(w)打开文件时,文件都会被清除。

实际上,您只看到写入的最后一行,因为您的循环一直以写入模式打开文件(有效地删除其内容)。

在最后一次迭代中,循环结束,只显示最后一行。

您可以使用with语句简化代码,该语句只会打开文件一次,并自动关闭它:

with open('vr_vm.txt', 'w') as f:
    for kk in range(1, 10):
        vr = kk+1
        vm = kk+2
        f.write('%s %s\n' % (vr, vm))