【问题标题】:Python won't write small object to file but will with large objectPython不会将小对象写入文件,但会写入大对象
【发布时间】:2023-03-22 21:23:01
【问题描述】:

这很令人困惑。当我有以下代码时:

lista = [i for i in range(10)]          

file=open("file.txt","a") 
file.write("\n")
file.write("".join(str(lista)))

输出“file.txt”将是一个零字节的空文件。但是当我增加要写入的字符串的大小时......

lista = [i for i in range(10000)]      # Or larger    

file=open("file.txt","a") 
file.write("\n")
file.write("".join(str(lista)))

它工作正常。虽然这对我来说没有意义,但它的行为就像写入输出文件有最小文件大小一样。为什么是这样?这个问题是我的计算环境独有的吗?

感谢任何帮助。 我正在开发 Mac OS Yosemite。 Python 3。

【问题讨论】:

  • 适用于 Ubuntu 和 python 3.4。也可能你想要"".join(map(str,lista))
  • 您是否在两次操作后都关闭了文件?
  • 可能是缓冲问题。见documentation
  • 它对我有用,这些是我的 file.txt 的内容:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  • @kartikg3 我正在删除运行之间的文件。

标签: python file-io


【解决方案1】:

您应该在将内容写入文件后调用close 方法。

lista = [i for i in range(10)]          

file=open("file.txt","a") 
file.write("\n")
file.write("".join(str(lista)))
file.close()

或者使用with语句自动关闭文件:

lista = [i for i in range(10)]          

with open("file.txt","a")  as file:
    file.write("\n")
    file.write("".join(str(lista)))

【讨论】:

  • @Malonge write 方法并没有真正向文件写入内容,它只是将数据写入缓冲区,您应该使用 close 方法告诉它将数据刷新到文件并然后关闭它。
  • 甚至 file.flush() 都可以解决他的问题...但是通常使用或关闭是更好的解决方案 (+1)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多