2013-08-07 19 views
5

Próbuję konwertować pliki Excel do plików CSV przy użyciu biblioteki xlrd.python xlrd przekonwertować xlsx na csv

Ale mam ten błąd:

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

Może to być, ponieważ plik Excel jest zbyt duży? Ponieważ wszystko działa dobrze z plikami Excela, które mają małą liczbę wierszy. Ale kiedy próbowałem przekonwertować plik Excela, który ma prawie 2000 wierszy, dostałem ten błąd.

[UPDATE]

Jest to kod:

filepath = './attachments' 
wb = xlrd.open_workbook(os.path.join(filepath, 'result.xls')) 
sheet = wb.sheet_by_index(0) 
fp = open(os.path.join(filepath, 'result.csv'), 'wb') 
wr = csv.writer(fp, quoting=csv.QUOTE_ALL) 
for rownum in xrange(sheet.nrows): 
    wr.writerow(sheet.row_values(rownum)) 
fp.close() 

I to jest traceback:

Traceback (most recent call last): 
    File "MethodTest.py", line 11, in <module> 
    wr.writerow(sheet.row_values(rownum)) 
UnicodeEncodeError: 'ascii' codec can't encode character u'\u0142' in position 2: ordinal not in range(128) 
+0

Pokaż nam kod i pełne informacje zwrotne; nie jest to spowodowane wielkością arkusza kalkulacyjnego. –

+0

@MartijnPieters: Właśnie zaktualizowałem kod i śledzenie. Dzięki. – Cacheing

Odpowiedz

10

Czytasz arkusz Excela z danymi spoza zakresu ASCII.

Podczas zapisywania wartości Unicode do pliku CSV, odbywa się automatyczne kodowanie, ale dla wartości spoza zakresu znaków ASCII, które ulegają awarii. Kodować wyraźnie:

for rownum in xrange(sheet.nrows): 
     wr.writerow([unicode(val).encode('utf8') for val in sheet.row_values(rownum)]) 

lub, dla Pythona 3 (za pomocą str() i range()):

for rownum in range(sheet.nrows): 
     wr.writerow([str(val).encode('utf8') for val in sheet.row_values(rownum)]) 

może trzeba wybrać innego kodowania, w zależności od potrzeb.

+0

Mam ten błąd: 'AttributeError: obiekt 'float' nie ma atrybutu 'encode''. Wygląda na to, że mam różne typy danych, a nie tylko String. Więc jak mogę obsługiwać te różne typy danych. – Cacheing

+0

Spróbuj z moją aktualizacją :-) –

+0

Działa to świetnie! Dzięki. – Cacheing

Powiązane problemy