Python:文件IO - 禁用增量刷新

3 投票
3 回答
1830 浏览
提问于 2025-04-15 11:36

这有点像是这个问题的反面。

有没有办法告诉Python:“在我说之前,不要写入磁盘。”(通过关闭或刷新文件)?我正在向一个网络上的文件写入数据,更希望一次性写入整个文件。

目前,我是先写入一个StringIO缓冲区,然后最后再把它写入磁盘。

3 个回答

1

我觉得这主要取决于你想要做什么。

我遇到这个问题的情况是,我的应用程序在创建一个文件时有点慢,而这个文件又被另一个应用程序使用,结果另一个应用程序拿到的文件版本不完整。

我解决这个问题的方法是先把文件写到一个不同的地方,等我写完了再把它改名到正确的位置。

如果你有其他原因需要这样做,那这个方法可能就不适用了。

3

你可以用任意大小的缓存来打开你的文件。比如说,如果你想用最多十亿字节的缓存,可以这样写:x=open('/tmp/za', 'w', 1000*1000*1000)。如果你有一百亿字节的内存,想把它们都用上,只需要再加上几个*100...就行了;-)。不过不用担心,内存只会根据实际需要来使用,不会浪费。

3

不,看看Python手册并没有说明可以把缓冲区大小设置为无限大。

你现在的解决方案基本上是同样的概念。

可以使用Alex的想法,但我不太建议这样做,原因如下:

  1. 打开时的缓冲区大小限制在2^31-1,也就是2GB。超过这个大小会导致“OverflowError: long int too large to convert to int”的错误。
  2. 看起来这个方法并不奏效:

    a = open("blah.txt", "w", 2 ** 31 - 1)
    for i in xrange(10000): 
        a.write("a")
    

在不关闭Python的情况下打开文件,你会看到文本内容。

撰写回答