Я загружаю файлы из S3, содержащие данные JSON (например), которые я намерен анализировать в кадре данных Pandas, используя pd.read_json
.Разбор JSON с использованием Pandas - проблема с дополнительными символами escape
Моя проблема заключается в том, что файлы, сбрасываемые в ведро S3, используют форматирование «восьмеричного побега» для неанглийских символов, но объекты Python/Pandas относятся к тому факту, что также включен escape для символа \
.
Примером может быть строка: "destination":"Provence-Alpes-C\\303\\264te d\'Azur"
который печатает как:
Если я вручную удалить один из \
символов, то Python счастливо интерпретирует строку и печатает как:
В этом thread есть некоторые хорошие вещи, и хотя .decode('string_escape')
хорошо работает с отдельным фрагментом, когда его часть намного длинней строки содержит тысячи записей, тогда она не работает.
Я считаю, что мне нужен умный способ заменить \\
на \
, но по хорошо документированным причинам .replace('\\', '\')
не работает.
Для того, чтобы получить файлы работать на все, что я использовал регулярное выражение, чтобы удалить все \
, за которым следует номер: re.sub(r'\\(?=[0-9])', '', g)
- я имею в виду, что адаптация это может быть путь вперед, но количество должно быть динамичным как я не знаю, что это будет (то есть, используя и \2
для примера выше не будет работать ')
Помогите оценить.
Спасибо Мартину, это хорошо работает. Очень редко я получаю сообщение об ошибке - chr() arg не находится в диапазоне (256). Я попытался точно определить, где это падает, хотя его жесткий, поскольку эти файлы массивны! – Jacob
См. Суть, которую я связал в своем втором комментарии. –
Я действительно думал о повторном открытии, потому что у вас есть восьмеричные escape-последовательности для байтов UTF-8, а не для кодов Unicode. Связано, не то же самое. –