3

特定のコンテンツを解析する必要がある約50GBのテキストファイルがいくつかあります。私のファイルの内容は4行のブロックで構成されています。この分析を実行するために、file.read(chunk_size)を使用してファイルのサブセクションを読み取り、4つのブロックに分割して、それらを分析します。

このスクリプトを頻繁に実行するため、最適化を行い、チャンクサイズを変更してみました。16 GBRAMを搭載したコンピューターのOSXLionで64ビット2.7.1pythonを実行しましたが、期待されるテキストの代わりに2 ^ 31以上のチャンクをロードすると、大量の/x00が繰り返されることに気付きました。これは、私のテストが2 ^ 32までを示している限り続き、その後、もう一度テキストを取得します。ただし、4GBを超えるバッファにバイトが追加されたのと同じ数の文字しか返さないようです。

私のテストコード:

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'

正確には何が起こっているのですか?

4

1 に答える 1

1

はい、cpython のソース コードのコメントによると、これは既知の問題です。Modules/_io/fileio.c で確認できます。また、コードは Microsoft Windows 64 ビットのみで回避策を追加します。

于 2012-12-22T05:41:27.600 に答える