Python写入函数不是写入最后一个条目

时间:2017-03-06 05:07:53

标签: python csv

这是我的代码的简化版本。我正在尝试使用以下方法写入文件:

fileName = "missing.csv"
for x in range (0,5):
    print(x)
    saveData = open(fileName, "a")
    saveData.write(str(x)+'\n')
    saveData.close

控制台打印:

0, 1, 2, 3, 4

......应该如此。但是,当我打开missing.csv时,它只包含:

0
1
2
3

最后一个条目(4)。

任何想法?请指教。

4 个答案:

答案 0 :(得分:5)

如果您使用上下文管理器,则无需担心关闭:

fileName = "missing.csv"
for x in range(0, 5):
    print(x)
    with open(fileName, "a") as save_data:
        save_data.write(str(x) + '\n')

如果你不希望在每次操作后关闭文件,你可以只打开和关闭它一次:

fileName = "missing.csv"
with open(fileName, "a") as save_data:
    for x in range(0, 5):
        print(x)
        save_data.write(str(x) + '\n')

答案 1 :(得分:2)

为避免您在代码中犯的错误(错过().close),您可以使用上下文管理器:

fileName = "missing.csv"
for x in range (0,5):
    print(x)
    with open(fileName, "a") as saveData:
        saveData.write(str(x)+'\n')

.close()区块的出口处隐含调用with..

答案 2 :(得分:2)

无需在循环中打开/关闭文件,打开一次并关闭一次。除此之外,您在()函数中缺少close

fileName = "missing.csv"
saveData = open(fileName, "a")
saveData.write("\n".join( map(str, range(0,5)) ))
saveData.close()

如果您更喜欢使用上下文。

fileName = "missing.csv"
with open(fileName, "a") as save_data:
   save_data.write("\n".join( map(str, range(0,5)) ))

答案 3 :(得分:-1)

这个python代码没有任何问题。还有别的错误。

删除missing.csv并重试。我怀疑从前一次运行中遗留了0 1 2 3并且missing.csv实际上没有更新。

可能是权限问题。检查文件权限以查看运行脚本的用户是否具有权限。 I.E.确保该组没有错,所有者没有错,并且实际的rwx值没有错误。