1

JSON ファイルを読み込んで、「テキスト」フィールドに含まれる単語数を特定し、その情報を新しいフィールド「長さ」として追加し、新しい JSON オブジェクトをファイルに書き込もうとしています。私は次のコードでそれを行いました:

import json

with open("file_read.json", "r") as review_file, open(
    "file_write.json", "w") as review_write:
    for line in review_file:
        review_object = json.loads(line)
        review_object["length"] = len(review_object["text"].split())
        json.dump(review_object, review_write)

元のファイルは 200MB を超えていますが、Vim で問題なく表示できます。ただし、私が作成したファイルは 3 MB しか大きくないため、ロードするとロードに非常に長い時間がかかります。さらに、最初の JSON オブジェクトだけを読み取っても問題があります。ファイルを書き込んだ後、次のことを試しました。

with open("file_write", "r") as review_file:
    print review_file.readline()
    print("abcd123")

私は python-mode で Vim を使用しています。最初に出力されたステートメントを JSON 情報でトラバースすると、非常に途切れますが、2 番目のステートメントはそうではありません。

4

2 に答える 2

3

ファイルを書いている方法では、巨大な行が 1 つしかありません。

# example
json.dump([1,2,3], fp)
json.dump({"name": "abc"}, fp)
json.dump(33, fp)
# content of file
# [1, 2, 3]{"name": "abc"}33

これは、読むのがとても遅い理由を説明しているかもしれません: 一度に最大 200MB のテキストをロードする必要があります。また、json としてロードすると、おそらく失敗します。

それを解決するには、代わりに使用できます:

fp.write(json.dumps(review_object) + "\n")
于 2013-06-06T17:44:08.540 に答える