2013-08-29 4 views
4

현재 CSV 파일을 사용하여 장고 모델에 데이터를 삽입하고 있습니다. 다음은 간단한 저장 함수입니다 :csv 파일에서 비 ASCII 문자 제거

def save(self): 
myfile = file.csv 
data = csv.reader(myfile, delimiter=',', quotechar='"') 
i=0 
for row in data: 
    if i == 0: 
     i = i + 1 
     continue #skipping the header row   

    b=MyModel() 
    b.create_from_csv_row(row) # calls a method to save in models 

이 함수는 ascii 문자와 완벽하게 작동합니다. CSV 파일 다음 약간 비 ASCII 문자가있는 경우에는 에러가 발생된다 UnicodeDecodeError 'ASCII'코덱 위치 1,526에서 바이트 0x93를 디코딩 할 수 범위 (128)

하지 서수 내 질문 :이 오류를 피하기 위해 내 CSV 파일을 저장하기 전에 비 ASCII 문자를 어떻게 제거 할 수 있습니까?

미리 감사드립니다. 당신이 정말로 그것을 제거하려면

답변

6

, 시도 :

import unicodedata 

unicodedata.normalize('NFKD', title).encode('ascii','ignore') 

* 경고 이것은 당신의 데이터를 수정하는 것 * 그것은 가까운 경기를 찾으려고 시도 - 즉, C - 아마> C

을 더 좋은 대답은 대신 unicodecsv을 사용하는 것입니다. 당신은 데이터가 전혀 표시되는 것을 걱정하지 않는 경우

----- 편집 ----- 좋아, 다음을 시도

# If row references a unicode string 
b.create_from_csv_row(row.encode('ascii', 'ignore')) 

행 모음이 아닌 경우 유니 코드 문자열이면 컬렉션을 문자열 수준으로 반복하여 다시 serialize해야합니다.

+0

을하지만 난 완전히 편집 시도해 @Benarito 비 아스키 부르는 것들은 –

+0

을 제거 할. – DivinusVox

+0

고마워. 그것에 대해 어떻게 생각하는지 궁금하다. –

3

데이터에서 비 ASCII 문자를 제거하려면 데이터를 반복하고 ASCII 만 유지하십시오.

for item in data: 
    if ord(item) <= 128: # 1 - 128 is ascii 
      [append,write,print,whatever] 

유니 코드 문자를 ascii로 변환하려면 위의 DivinusVox의 응답이 정확해야합니다.

+0

답해 주셔서 감사합니다.하지만 CSV 파일에서 ASCII가 아닌 문자를 완전히 제거하고 싶습니다. 함수를 사용하려고하면 ord()에서 길이가 1 인 오류가 발생합니다. 예상되는 길이는 1이지만 목록을 찾습니다. 어쩌면 그 행마다 하나 이상의 문자 (목록)가 들어 있기 때문입니다. 하지만 내 주요 문제는 csv 파일에서 ASCII가 아닌 문자를 제거하는 방법입니다. –

+0

@ 베나 리토 귀하의 데이터는 단지 문자열의 1 차원 목록입니까? – DivinusVox

+0

@DivinusVox, 예, 1 차원 문자열 (예 : , line 1, line 2, line 3 –

3

팬더 CSV 파서 (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.io.parsers.read_csv.html는) 다른 인코딩 지원 : 귀하의 답변에 대한 DivinusVox..Thanks @

import pandas 
data = pandas.read_csv(myfile, encoding='utf-8', quotechar='"', delimiter=',') 
+0

답변 해 주셔서 감사합니다.하지만 주된 문제는 파일 내용을 저장하기 전에 비 ASCII 문자를 제거하는 방법입니다. –

+0

감사합니다. 아이디어를 찾았습니다. 그것에 대해가는 방법에 –