1

.json.gzいくつかのファイルを解凍しようとしていますがgzip、いくつかの文字が追加されているため、JSON で読み取ることができません。

何が問題だと思いますか、どうすれば解決できますか?

7zip などの解凍ソフトウェアを使用してファイルを解凍すると、この問題はなくなります。

これは私のコードです:

with gzip.open('filename' , 'rb') as f:
    json_content = json.loads(f.read())

これは私が得るエラーです:

Exception has occurred: json.decoder.JSONDecodeError
Extra data: line 2 column 1 (char 1585)

私はこのコードを使用しました:

with gzip.open ('filename', mode='rb') as f:
    print(f.read())

そして、ファイルが次で始まることに気付きましたb'(以下に示すように):

b'{"id":"tag:search.twitter.com,2005:5667817","objectType":"activity"

b'次の段階でファイルが機能しなくなる原因だと思います。を削除する解決策はありb'ますか? この zip ファイルは何百万もありますが、手動で行うことはできません。

これらのファイルのサンプルを次のリンクにアップロードしました json.gz ファイルのほんの一部です

4

1 に答える 1

3

問題は でb見られるプレフィックスにはありません。print(f.read())これは、データがbytesUTF-8 文字のシーケンス (つまり、通常の Python 文字列) ではなく、シーケンス (つまり、整数の ASCII 値) であることを意味します —json.loads()どちらも受け入れます。これJSONDecodeErrorは、gzip ファイル内のデータが有効なJSON 形式ではないためです。これ必須です。このフォーマットは、 JSON Linesとして知られているもののように見えます— Python 標準ライブラリjsonモジュールは (直接) サポートしていません。

@Charles Duffyの質問に対するDunes の回答は、ある時点で、このフォーマットの問題により、 の複製が提示されたとおりに機能しなかったとして、これをマークしました。ただし、質問にリンクを追加したサンプル ファイルからは、ファイルの各行に有効な JSON オブジェクトがあるように見えます。それがすべてのファイルに当てはまる場合、簡単な回避策は、各ファイルをごとに処理することです。

これが私が意味することです:

import json
import gzip


filename = '00_activities.json.gz'  # Sample file.

json_content = []
with gzip.open(filename , 'rb') as gzip_file:
    for line in gzip_file:  # Read one line.
        line = line.rstrip()
        if line:  # Any JSON data on it?
            obj = json.loads(line)
            json_content.append(obj)

print(json.dumps(json_content, indent=4))  # Pretty-print data parsed.    

印刷される出力は、有効な JSON がどのように見えるかを示していることに注意してください。

于 2019-02-17T16:30:28.573 に答える