我有几个大约 50 GB 的文本文件,我需要解析它们以获取特定内容。我的文件内容被组织在 4 行块中。为了执行此分析,我使用 file.read(chunk_size) 读取文件的子部分并分成 4 个块,然后分析它们。
因为我经常运行这个脚本,所以我一直在优化并尝试改变块大小。我在具有 16 GB RAM 的计算机上在 OSX Lion 上运行 64 位 2.7.1 python,我注意到当我加载 >= 2^31 的块时,而不是预期的文本,我得到了大量的 /x00 重复。就我的测试一直显示到(包括 2^32)而言,这种情况仍在继续,之后我再次收到文本。但是,它似乎只返回与添加到 4 GB 以上缓冲区的字节数一样多的字符。
我的测试代码:
for i in range((2**31)-3, (2**31)+3)+range((2**32)-3, (2**32)+10):
with open('mybigtextfile.txt', 'rU') as inf:
print '%s\t%r'%(i, inf.read(i)[0:10])
我的输出:
2147483645 '@HWI-ST550'
2147483646 '@HWI-ST550'
2147483647 '@HWI-ST550'
2147483648 '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
2147483649 '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
2147483650 '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
4294967293 '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
4294967294 '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
4294967295 '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
4294967296 '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
4294967297 '@\x00\x00\x00\x00\x00\x00\x00\x00\x00'
4294967298 '@H\x00\x00\x00\x00\x00\x00\x00\x00'
4294967299 '@HW\x00\x00\x00\x00\x00\x00\x00'
4294967300 '@HWI\x00\x00\x00\x00\x00\x00'
4294967301 '@HWI-\x00\x00\x00\x00\x00'
4294967302 '@HWI-S\x00\x00\x00\x00'
4294967303 '@HWI-ST\x00\x00\x00'
4294967304 '@HWI-ST5\x00\x00'
4294967305 '@HWI-ST55\x00'
到底发生了什么?