2014-07-13 2 views
0

페이지에서 xls 파일을 긁어 csv에 저장하려고합니다. 파일을 처리하는 함수를 만들었지 만 파일을 쓰려고하면 파일의 문자 중 하나를 처리 할 수 ​​없다는 인코딩 오류가 발생합니다.목록의 유니 코드 오류가 xls에서 csv 파일로 이동 중임

UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 9: ordinal not in range(128) 

나는 대부분의 항목에서 작동하는 것 같다 유니 코드 기능을 사용하여 목록에있는 모든 항목에 걸쳐 UTF-8을 적용하기 위해 노력하고있어,하지만 어떻게 든 나는 여전히 같은 오류를 받고 있어요.

def csv_from_excel(fileName): 
# open the xls file and save as a csv 

wb = xlrd.open_workbook(fileName) 
worksheets = wb.sheet_names() 
for worksheet_name in worksheets: 
    worksheet = wb.sheet_by_name(worksheet_name) 
    print worksheet 
    csvfile = open(fileName, 'wb') 
    wr = csv.writer(csvfile, quoting=csv.QUOTE_ALL) 

    for rownum in xrange(worksheet.nrows): 
     cleanrow = [unicode(i) for i in worksheet.row_values(rownum)] 
     print cleanrow 
     wr.writerow(cleanrow) 

    csvfile.close() 

답변

1

파이썬 2에서는 csv 모듈, 유니 코드 값으로 인코딩 된 문자열을 통과해야합니다.

for rownum in xrange(worksheet.nrows): 
    cleanrow = [unicode(i).encode('utf8') for i in worksheet.row_values(rownum)] 
    print cleanrow 
    wr.writerow(cleanrow) 

이 값은 writer 객체에 전달하기 전에 모든 값을 UTF-8로 인코딩합니다.

개체의 unicode()을 호출하면 비 유니 코드 값 (바이트 문자열, 숫자 등)이 UTF-8로 인코딩 된 바이트가 아닌 unicode 개체로 변환됩니다. 명시적인 .encode() 메서드 호출 만 수행합니다.

+0

Martijn, 정말 대단히 감사합니다. 나는 그 문제를 몇 시간 동안 해킹 해왔다. – woodbine