Ежедневно я получаю файлы по 60 Гц, каждый из которых имеет json документ. После извлечения файла .gz я получаю файл json с кодировкой utf-8-bom, что в дальнейшем приводит к проблемам с загрузкой json. Я попробовал приведенный ниже код, который по какой-то причине работает с некоторыми из моих файлов .gz и не работает с некоторыми.
with gzip.open(source_filepath, 'rb') as s_file, \
open(dest_filepath, 'wb') as d_file:
shutil.copyfileobj(s_file, d_file, block_size)
s = open(dest_filepath, mode='r', encoding='utf-8-sig').read()
open(dest_filepath, mode='w', encoding='utf-8').write(s)
print('File unzipped.')
Я пытался использовать chardet для проверки кодировки файлов, которые не работают конвертируем в 'utf-8', в результате получаем 'utf-8-sig', поэтому он должен работать, но я не могу понять, почему он не работает.
У меня есть код ниже для загрузки json при использовании i json
def load_json3(filepath):
print('Extracting values from JSON...')
my_oids = []
my_edition = []
my_action = []
pdict = {}
#global dfObj
with open(filepath, 'r') as input_file:
parser = ijson.parse(input_file, multiple_values=True)
for prefix, event, value in parser:
#print('prefix={}, event={}, value={}'.format(prefix, event, value))
if prefix == 'OID':
my_oids.append(value)
pdict['ID'] = [value]
elif prefix == 'edition':
my_edition.append(value)
pdict['edition'] = [value]
elif prefix == 'action':
my_action.append(value)
pdict['action'] = [value]
json файл выглядит следующим образом:
{"ID": "2294.89748", "edition": 1, "timeStamp": " 2020-03-17T08: 46: 56,701" , "TransactionID": 195787618595, "действие": "СОЗДАНА", "acct_no": "8XXX6780XXXX", "cust_no": 5XXX5, "статус": "А", "myGlobal" : "[3008.1]"}
{"ID": "2294.74400", "edition": 1, "timeStamp": "2020-03-17T11: 10: 23.503", "actionID ": 195795719559, «action»: «UPDATED», «status»: «D»}
, и я получаю следующее сообщение об ошибке:
Traceback (последний последний вызов):
runtime_1 | Файл "", строка 329, в
runtime_1 | recon1 ()
runtime_1 | Файл "", строка 122, в файлеcon1
runtime_1 | df = load_json3 (filepath) # pd.read_ json (filepath, lines = True) # json dataframe
runtime_1 | Файл "", строка 270, в load_json3
runtime_1 | для префикса, события, значения в парсере:
runtime_1 | i json .common.IncompleteJSONError: лексическая ошибка: неверный символ в json тексте.
runtime_1 | ? {"ID": "2294.89740", "издание
runtime_1 | (прямо здесь) ------ ^
Это сообщение об ошибке json. Если я пытаюсь загрузить тот же файл со стандартным 'json .loads' Я получаю это сообщение об ошибке "json .decoder.JSONDecodeError: Неожиданная спецификация UTF-8 (декодирование с использованием utf-8-sig): строка 1 столбец 1 (символ 0 ) "