2017-09-22 12 views
0

私は非常に大きなファイル(〜300GB)から偶数行を取得しようとしていますが、エラーを受け取っているのとほぼ同じサイズのファイルに対して実行できます。大きなファイルのitertoolsシステムエラー

import itertools 
import sys, os 

with open('FILE.fasta') as f: 
    fd = open("FILE.txt","w") 
    fd.writelines(set(itertools.islice(f, 0, None, 2))) 
    fd.close() 

とエラーは、次のとおりです:コードがある

Traceback (most recent call last): 
    File "new3.py", line 7, in <module> 
    fd.writelines(set(itertools.islice(f, 0, None, 2))) 
    SystemError: Negative size passed to PyString_FromStringAndSize 

あなたは確かにファイルがあまりにも大きいので、それはあると思いますか?コードが動作している間、私はメモリ使用量をチェックしました。それは決して50%以上でした。

私は助けていただきありがとうございます!

+2

PyString_FromStringAndSizeのオーバーフローとよく似ています。 itertools呼び出しを一時変数に移動できますか?次に、私たちはもっと便利なスタックトレースを持っています –

+0

質問があれば、行番号を取得して偶数行を書くために 'enumerate()'を使って入力ファイルハンドルを繰り返します –

+0

また、必要? – GolfWolf

答えて

0

基礎となるイテレータからsetを作成しないでください。非常に高価な手順です。あなたは直接writelinesに、このイテレータを与えることができる必要があります:

fd.writelines(itertools.islice(f, 0, None, 2)) 

その他の小さなNIT:あなたはすでにライン上sysを輸入しているので、あなたが

import sys, os 

を記述する必要はありません

上記。上記の行を削除するか、import osと入力してください。

+0

あなたの返事をありがとうございます、しかし、そうではありません。私は 'set ' – bapors

関連する問題