2016-10-17 3 views
0

複数の.gz jsonファイル(ファイルはテキストファイル)を解析しようとしています。 Python 2.7.10。複数の.gzファイルを読み取るエラー:解凍中にエラー-3が発生しました:無効なコードの長さが設定されました

error: Error -3 while decompressing: invalid code lengths set

をし、実行を停止します。しかし、ほとんどのこれらのファイル内の各ラインの解析の最後に、それはこのエラーを生成します。

これは私のコードです:

import gzip 
import json 
from multiprocessing import Pool, cpu_count 

def build_list(file_name): 

    count = 0 

    try: 
     json_file = gzip.open(file_name, "r") 
    except Exception as e: 
     print e 
    else: 

     # Data parsing 
     for line in json_file: 
      try: 
       row = json.loads(line) 
      except Exception as e: 
       print e 
      else:     
       count += 1 

if __name__ == "__main__": 

    files = ["h1.json.gz", "h2.json.gz", "h3.json.gz", "h4.json.gz", "h5.json.gz"] 

    pool = Pool(processes=cpu_count()-1) 
    pool.map(build_list, files) 

プログラムがうまく実行されていると私はtopに確認したときにファイルが各プロセッサに割り当てられていることを開始することを明らかにすることが重要です。私もgunzip -tとファイルの整合性をチェックし、彼らはよく形成されているようだ。また、エラーの前に発生した例外はありませんでした。どのように修正することができますか?前もって感謝します。

+0

バイナリモードで読み込み:gzip.open(...、 "rb"、...)。私はほぼ肯定的です。私はこのソリューションの日を前に見たことを誓って、これは欺瞞ですが、私は質問を見つけることができません。 – Max

答えて

0

バイナリモードで読む:

gzip.open(file_name, "rb") 

がテキストモードで読み込むには、(それがテキストでないように)いくつかのプラットフォーム上でデータをマングルすることができ、このような奇妙なエラーが発生します。

+0

ありがとうございます。私はすでに ' gzip.open(file_name、" rb ")' – Paul

+0

を試しましたが、うまくいきませんでした。他のすべてのsuggetion? @Max – Paul

+0

マルチプロセッシングなしで動作しますか? – Max

0

読み込み時にポインタの各行の完全性をチェックするtryブロックを使用しました。最終的なコードは次のようになります。

def build_list(file_name): 

    count = 0 

    try: 
     json_file = gzip.open(file_name, "r") 
    except Exception as e: 
     print e 
    else: 

     try: 
      # Data parsing 
      for line in json_file: 
       try: 
        row = json.loads(line) 
       except Exception as e: 
        print e 
       else:     
        count += 1 
     except Exception as e: 
      print e 

ご意見ありがとうございます。

関連する問題