如何分块写入文件以避免大文件错误?
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)
我有一段非常简单的代码:
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)