如何分块写入文件以避免大文件错误?

How do I write to file in blocks in order to circumvent an error with large file sizes?

我有一段非常简单的代码:

f = open('file.txt','w+')
f.write(result)
f.close()

问题是字符串 'result' 的大小可能高达几千兆字节。虽然创建成功,但是写到文件中会出现这个错误:

OSError: [Errno 22] Invalid argument

我了解到这是 运行 Python 在 OS X 中的一个已知问题(我是 运行 10.13 High Sierra)。我怎样才能将写函数分解成块来绕过它?

(我也知道这是32位版本由于固有的限制无法解决的问题,但我是运行64位的)

如果问题真的是内存不足,您可以尝试逐行追加。

with open('output.txt', 'a') as f:
    for item in result:
        f.write(item)

在这种情况下,result 是一个行列表。您应该根据 result 对象的内容进行调整。

试着分块写

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)