我想使用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()
我的问题是每次代码覆盖以前写的行。我怎么能摆脱这个呢? 感谢
答案 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 该文件(其内容被删除)。然后在空文件中写入变量值。
因此循环后的内容文件只是最后写入的值。
如何解决?只需将open
和close
来电置于循环之外:
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))