Python:文件IO - 禁用增量刷新
这有点像是这个问题的反面。
有没有办法告诉Python:“在我说之前,不要写入磁盘。”(通过关闭或刷新文件)?我正在向一个网络上的文件写入数据,更希望一次性写入整个文件。
目前,我是先写入一个StringIO缓冲区,然后最后再把它写入磁盘。
3 个回答
1
我觉得这主要取决于你想要做什么。
我遇到这个问题的情况是,我的应用程序在创建一个文件时有点慢,而这个文件又被另一个应用程序使用,结果另一个应用程序拿到的文件版本不完整。
我解决这个问题的方法是先把文件写到一个不同的地方,等我写完了再把它改名到正确的位置。
如果你有其他原因需要这样做,那这个方法可能就不适用了。
3
你可以用任意大小的缓存来打开你的文件。比如说,如果你想用最多十亿字节的缓存,可以这样写:x=open('/tmp/za', 'w', 1000*1000*1000)
。如果你有一百亿字节的内存,想把它们都用上,只需要再加上几个*100...就行了;-)。不过不用担心,内存只会根据实际需要来使用,不会浪费。
3
不,看看Python手册并没有说明可以把缓冲区大小设置为无限大。
你现在的解决方案基本上是同样的概念。
你可以使用Alex的想法,但我不太建议这样做,原因如下:
- 打开时的缓冲区大小限制在2^31-1,也就是2GB。超过这个大小会导致“OverflowError: long int too large to convert to int”的错误。
看起来这个方法并不奏效:
a = open("blah.txt", "w", 2 ** 31 - 1) for i in xrange(10000): a.write("a")
在不关闭Python的情况下打开文件,你会看到文本内容。