Устранение неполадок кодирования / декодирования для файлов CSV и JSON Python
Сначала я создал файл, содержащий определенное предложение, используя:
with open(labelFile, "wb") as out:
json.dump(result, out,indent=4)
Это предложение в JSON выглядит так:
"-LSB- 97 -RSB- However , the influx of immigrants from mainland China , approximating NUMBER_SLOT per year , is a significant contributor to its population growth \u00c3 cents \u00c2 $ \u00c2 `` a daily quota of 150 Mainland Chinese with family ties in LOCATION_SLOT are granted a `` one way permit '' .",
Затем я продолжил загружать это через:
with open(sys.argv[1]) as sentenceFile:
sentenceFile = json.loads(sentenceFile.read())
обработайте это и затем запишите это в CSV, используя:
with open(sys.argv[2], 'wb') as csvfile:
fieldnames = ['x','y','z'
]
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for sentence in sentence2locations2values:
sentence = unicode(sentence['parsedSentence']).encode("utf-8")
writer.writerow({'x': sentence})
Который сделал предложение в CSV-файле, открытом в Excel для Mac:
-LSB- 97 -RSB- However , the influx of immigrants from mainland China , approximating NUMBER_SLOT per year , is a significant contributor to its population growth à cents  $  `` a daily quota of 150 Mainland Chinese with family ties in LOCATION_SLOT are granted a `` one way permit '' .
Затем я перешел из Excel для Mac в Google Sheets, где он находится:
-LSB- 97 -RSB- However , the influx of immigrants from mainland China , approximating NUMBER_SLOT per year , is a significant contributor to its population growth à cents  $  `` a daily quota of 150 Mainland Chinese with family ties in LOCATION_SLOT are granted a `` one way permit '' .
Обратите внимание, очень немного отличается, Â
заменил Ã
,
а затем пометил его, вернув его обратно в Excel для Mac, после чего он вернулся к:
-LSB- 97 -RSB- However , the influx of immigrants from mainland China , approximating NUMBER_SLOT per year , is a significant contributor to its population growth à cents  $  `` a daily quota of 150 Mainland Chinese with family ties in LOCATION_SLOT are granted a `` one way permit '' .
Как я изначально читаю в CSV, содержащем такое предложение:
-LSB- 97 -RSB- However , the influx of immigrants from mainland China , approximating NUMBER_SLOT per year , is a significant contributor to its population growth à cents  $  `` a daily quota of 150 Mainland Chinese with family ties in LOCATION_SLOT are granted a `` one way permit '' .
на значение, которое:
"-LSB- 97 -RSB- However , the influx of immigrants from mainland China , approximating 45,000 per year , is a significant contributor to its population growth \u00c3 cents \u00c2 $ \u00c2 `` a daily quota of 150 Mainland Chinese with family ties in Hong Kong are granted a `` one way permit '' .",
Чтобы он соответствовал тому, что было в исходном дампе json прямо в начале этого вопроса?
РЕДАКТИРОВАТЬ
Я проверяю из этого и вижу, что кодировка \u00c3
в Ã
, формат в листах Google, на самом деле латинский 8.
РЕДАКТИРОВАТЬ
Я побежал enca
и увидите, что исходный дамп-файл содержит 7-битные символы ASCII, а мой CSV - в Unicode. Так что мне нужно загрузить в Unicode и преобразовать в 7-битный ASCII?
1 ответ
Я разобрался с решением этой проблемы. Решение состояло в том, чтобы декодировать файл CSV из его исходного формата (обозначенного как UTF-8
), а затем предложение становится первоначальным. Так:
csvfile = open(sys.argv[1], 'r')
fieldnames = ("x","y","z")
reader = csv.DictReader(csvfile, fieldnames)
next(reader)
for i,row in enumerate(reader):
row['x'] = row['x'].decode("utf-8")
Очень странная вещь, которая произошла, заключается в том, что когда я редактировал CSV-файл в Excel для Mac и сохранял его, каждый раз он, кажется, преобразовывался в другую кодировку. Я предупреждаю других пользователей об этом, так как это огромная головная боль.