我有大的gzip压缩文件。
我写了一段代码把这些文件分成更小的文件。我可以指定
每个文件的行数。问题是我最近增加了每个分割线的数量
当我处理更大的文件时,不会发生拆分。有时是一个小文件
成功生产,有时一个生产,但重量只有40或50磅,这是
失败。我试图通过查看gzip
中出现的异常来捕捉异常
代码。所以我的代码是这样的:
def writeGzipFile(file_name, content):
import gzip
with gzip.open(file_name, 'wb') as f:
if not content == '':
try:
f.write(content)
except IOError as ioe:
print "I/O ERROR wb", ioe.message
except ValueError as ve:
print "VALUE ERROR wb: ", ve.message
except EOFError as eofe:
print "EOF ERROR wb: ", eofe.message
except:
print "UNEXPECTED ERROR wb"
问题是当内容太高时,相关的行数,我经常得到 “意外错误”消息。所以我不知道这是哪种错误。在
最后我发现行数是问题所在,而且python的gzip
似乎无法同时在一个文件中写入如此多的数据。将每个分段的生产线数量减少到4000000个工程。不过,我想拆分内容,并按顺序写入一个文件,以确保即使是高数据内容也能被写入。在
因此,我想知道如何使用gzip
找出一个文件中可以一次性写入的最大字符数,而不会出现任何错误。在
编辑1
因此,我查看了所有剩余的异常(我不知道可以简单地捕获Exception
对不起):
错误大约是int
大小。我从没想过有一天我会超过int尺寸:
EXCEPTION: size does not fit in an int
TRACEBACK_1:Traceback (most recent call last):
File "/home/anadin/dev/illumina-project-restructor_mass-splitting/illumina-project-restructor/tools/file_utils/file_compression.py", line 131, in writeGzipFile
f.write(content)
File "/usr/local/cluster/python2.7/lib/python2.7/gzip.py", line 230, in write
self.crc = zlib.crc32(data, self.crc) & 0xffffffffL
OverflowError: size does not fit in an int
None
一个int的最大大小是2147483647,根据我的日志,我的数据块大约是3854674090。这个块是我应用了__len__()
函数的字符串。在
因此,正如我计划的那样,正如anttihaapala建议的那样,我将一次读取较小的块,以便按顺序将它们写入较小的文件中。在
无论如何,我怀疑原因是某种内存不足的错误。我不太清楚为什么不一次写更少的数据;这里使用
chunks
方法from this answer:也就是说,你要像吃大象一样,一次咬一口。在
相关问题 更多 >
编程相关推荐