我正在尝试转换大型文本文件(大小为5 gig +),但是 通过此post,我设法将文本文件的编码格式转换为对此可读的格式:
path ='path/to/file'
des_path = 'path/to/store/file'
for filename in os.listdir(path):
with open('{}/{}'.format(path, filename), 'r+', encoding='iso-8859-11') as f:
t = open('{}/{}'.format(des_path, filename), 'w')
string = f.read()
t.write(string)
t.close()
这里的问题是,当我尝试转换大尺寸(5 GB +)的文本文件时。我会收到此错误
Traceback (most recent call last):
File "Desktop/convertfile.py", line 12, in <module>
string = f.read()
File "/usr/lib/python3.6/encodings/iso8859_11.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
MemoryError
我知道它无法读取这么大的文件。我从几个链接中发现,可以通过逐行阅读来做到这一点。
那么,我该如何申请必须逐行读取的代码?我在这里逐行读取的内容是,我需要从f
中读取一行并将其添加到t
直到行尾,对吗?
答案 0 :(得分:1)
您可以迭代打开的文件的行。
for filename in os.listdir(path):
inp, out = open_files(filename):
for line in inp:
out.write(line)
inp.close(), out.close()
请注意,我在建议您实际编写的函数中隐藏了不同路径,编码和模式的复杂性……
重新缓冲,即读取/写入较大的文本块,Python进行了自己的缓冲秘密处理,因此相对于更复杂的解决方案来说,这应该不会太慢。