如何以块的形式写入文件以规避大文件大小的错误?
Posted
技术标签:
【中文标题】如何以块的形式写入文件以规避大文件大小的错误?【英文标题】:How do I write to file in blocks in order to circumvent an error with large file sizes? 【发布时间】:2019-06-20 13:07:58 【问题描述】:我有这段非常简单的代码:
f = open('file.txt','w+')
f.write(result)
f.close()
问题在于字符串“result”的大小可能高达数 GB。虽然创建成功,但是写入文件会导致这个错误:
OSError: [Errno 22] Invalid argument
我了解到这是在 OS X 中运行 Python 的一个已知问题(我正在运行 10.13 High Sierra)。如何将 write 函数分解成块以绕过它?
(我也知道这在 32 位版本中由于固有的限制是一个无法克服的问题,但我运行的是 64 位)
【问题讨论】:
你要写入哪个文件系统? 【参考方案1】:尝试分块书写
def chunks(l, n):
"""Yield successive n-sized chunks from l."""
for i in range(0, len(l), n):
yield l[i:i + n]
with open('file.txt','w+') as f:
for chunk in chunks(results, 1024): # try to play with this number
f.write(chunk)
【讨论】:
这行得通!但是,请注意,您在倒数第二行末尾错过了一个冒号。请注意查看此线程的其他人:这会减慢较小字符串的写入时间。但是,它可能是唯一成功编写较大字体的方法。【参考方案2】:如果问题真的是内存不足,可以尝试逐行追加。
with open('output.txt', 'a') as f:
for item in result:
f.write(item)
在这种情况下,result
是行列表。您应该根据 result
对象的内容来调整它。
【讨论】:
以上是关于如何以块的形式写入文件以规避大文件大小的错误?的主要内容,如果未能解决你的问题,请参考以下文章