При извлечении моего файла .json.gz некоторые символы добавляются в него - и файл не может быть сохранен как файл json - PullRequest
0 голосов
/ 16 февраля 2019

Я пытаюсь распаковать некоторые .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'?Существуют миллионы этого заархивированного файла, и я не могу сделать это вручную.

Я загрузил образец этих файлов по следующей ссылке , всего несколько файлов json.gz

1 Ответ

0 голосов
/ 17 февраля 2019

Проблема не в том префиксе b, который вы видите с print(f.read()), что означает, что данные представляют собой последовательность bytes (т.е. целочисленные значения ASCII), а не последовательность символов UTF-8 (т.е.обычная строка Python) - json.loads() примет либо.JSONDecodeError - потому что данные в файле gzipped не имеют допустимого формата JSON , что является обязательным.

Dunes ' answer к вопросу @Charles Duffy пометил это - в какой-то момент - как дубликат не сработал бы так, как было представлено из-за этой проблемы с форматированием.Однако из файла примера, на который вы добавили ссылку в своем вопросе, похоже, что в каждой строке файла есть действительный объект 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...