Заменить / игнорировать специальные символы в текстовом файле, Python 3.6 - PullRequest
0 голосов
/ 16 апреля 2020

Я читаю содержимое из текстового файла ниже, и я использовал кодировку = 'ISO-8859-1', но я могу видеть специальные символы в моем Dataframe. Пожалуйста, дайте мне знать правильную кодировку для этого.

'Cañon City|Colorado|Canon City, CO', 
'Kapaâ\x80\x98a|Hawaii|Kapaa, HI', 
'Waiâ\x80\x98anae|Hawaii|Urban Honolulu, HI',
'â\x80\x98ewa Beach|Hawaii|Urban Honolulu, HI',
'â\x80\x98ewa Beach|Hawaii|Urban Honolulu, HI', 
'â\x80\x98aiea|Hawaii|Urban Honolulu, HI', 
'La Cañada Flintridge|California|Los Angeles-Long Beach-Anaheim, CA', 
'La Cañada Flintridge|California|Los Angeles-Long Beach-Anaheim, CA', 
'Española|New Mexico|Espanola, NM', 
'Española|New Mexico|Espanola, NM'

1 Ответ

1 голос
/ 16 апреля 2020

Проблема в том, что у вас есть кодированный в ISO-8859-1 текст, и вы читаете его как Unicode.

Если вы точно знаете кодировку, вы можете декодировать ее напрямую:

import codecs
lines = [ 
  'Cañon City|Colorado|Canon City, CO', 
  'Kapaâ\x80\x98a|Hawaii|Kapaa, HI', 
  'Waiâ\x80\x98anae|Hawaii|Urban Honolulu, HI',
  'â\x80\x98ewa Beach|Hawaii|Urban Honolulu, HI',
  'â\x80\x98ewa Beach|Hawaii|Urban Honolulu, HI', 
  'â\x80\x98aiea|Hawaii|Urban Honolulu, HI', 
  'La Cañada Flintridge|California|Los Angeles-Long Beach-Anaheim, CA', 
  'La Cañada Flintridge|California|Los Angeles-Long Beach-Anaheim, CA', 
  'Española|New Mexico|Espanola, NM', 
  'Española|New Mexico|Espanola, NM' 
]
utf8_lines = [ 
  codecs.decode(bytes(line,'ISO-8859-1'), 'UTF-8')
  for line in lines 
]

utf8_lines

[ 
'Cañon City|Colorado|Canon City, CO', 
'Kapa‘a|Hawaii|Kapaa, HI', 
'Wai‘anae|Hawaii|Urban Honolulu, HI', 
'‘ewa Beach|Hawaii|Urban Honolulu, HI', 
'‘ewa Beach|Hawaii|Urban Honolulu, HI', 
'‘aiea|Hawaii|Urban Honolulu, HI', 
'La Cañada Flintridge|California|Los Angeles-Long Beach-Anaheim, CA', 
'La Cañada Flintridge|California|Los Angeles-Long Beach-Anaheim, CA',
'Española|New Mexico|Espanola, NM', 
'Española|New Mexico|Espanola, NM'
]

Если у вас есть неизвестные кодировки или даже дублированные кодировки в одном файле, то библиотека ftfy автоматически обнаружит и устранит все проблемы с кодировкой. При использовании внутри большого конвейера данных он может быть немного загружен (запускайте его только на тех сегментах текста, которые не являются символами ascii), но ваши проблемы с кодировкой будут решены.

[ 
  ftfy.fix_encoding(line)
  for line in lines 
]
[ 
  ftfy.fix_text(line)
  for line in lines 
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...