2014-06-23 4 views
0

파이썬에서 csv 파일의 열에서 위치 목록을 만들려고합니다.파이썬에서 악센트 부호가있는 문자를 포함하지 않도록 문자열을 다시 포맷하는 방법은 무엇입니까?

Rio Balira del Orien,Riu Valira d'Orient,Riu Valira d’Orient,Río Balira del Orien 

이 해당 현재 상태의 목록은 다음과 같습니다 :

이 열에서 하나 개의 항목 내 프로그램에서

locs = ['Rio Balira del Orien', "Riu Valira d'Orient", 'Riu Valira d\xe2\x80\x99Orient', 'R\xc3\xado Balira del Orien'] 

, 나는 주어진 단어에 있는지 확인해야 목록에서 악센트 부호가있는 문자, 아포스트로피 등의 미친 문자열 서식 (예 : \xc3\xad = í)을 제거하고 각각의 위치를 ​​간단한 소문자 ascii로 지정하려고합니다.

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 12: ordinal not in range(128) 

은 무엇 명령 내가 대신 사용한다 : 나는 코드는 오류가 발생

loclist = [x.encode('ascii').lower() for x in locs] 

를 사용하려고하면?

감사합니다.

답변

1
locs = ['Rio Balira del Orien', "Riu Valira d'Orient", 'Riu Valira d\xe2\x80\x99Orient', 'R\xc3\xado Balira del Orien'] 

완전히 제거하려면 다음

print [unicode(x,errors="ignore") for x in locs] 

[u'Rio Balira del Orien', u"Riu Valira d'Orient", u'Riu Valira dOrient', u'Ro Balira del Orien'] 

는 ASCII로 인코딩.

import unicodedata 
print [unicodedata.normalize('NFD', x.decode('utf-8')).encode('ascii', 'ignore') for x in locs] 

['Rio Balira del Orien', "Riu Valira d'Orient", 'Riu Valira dOrient', 'Rio Balira del Orien'] 
+0

OP가 악센트 부호가있는 문자를 모두 잃어 버렸다고해도 괜찮습니다. – dano

0

악센트 부호가있는 문자는 ascii로 인코딩 할 수 없습니다. 더 큰 문자 집합을 지원하는 확장 된 인코딩 유형을 사용해야합니다. 지금은 UTF-8로 인코딩 된 문자열을 포함하는 목록이 있는데, 이는 합리적인 저장 방법입니다.

>>> [l.decode('utf-8') for l in locs] 
[u'Rio Balira del Orien', u"Riu Valira d'Orient", u'Riu Valira d\u2019Orient', u'R\xedo Balira del Orien'] 

당신은 인코딩 된 문자열을 필요로하는 디스크에 쓰기 같은 일을하기 전에 문자열을 다시 인코딩 확인해야 만합니다 : 당신은 좋은 가장 좋은 방법이다, 대신 unicode 객체로 디코딩 할 수 . unicode 개체에서 encode('utf-8')을 호출하면됩니다.

관련 문제