2013-08-07 16 views
5

Excel dosyaları xlrd kütüphanesini kullanarak csv dosyalarına dönüştürmeye çalışıyorum.python xlrd xsx'i csv'ye dönüştürür

Ama bu hata var: excel dosyası çok büyük olduğundan

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

o olabilir mi? Çünkü her şey az sayıda satır içeren excel dosyaları ile iyi çalışır. Ama yaklaşık 2000 satır olan bir excel dosyasını dönüştürmeye çalıştığımda, bu hatayı aldım.

[GÜNCELLEME]

Bu kodudur:

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() 

Ve bu traceback geçerli:

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

Lütfen bize kodu ve tam izini gösterin; Bu e-tablo boyutu neden olmaz. –

+0

@MartijnPieters: Kodu ve geri izleme işlemini yeni güncelledim. Teşekkürler. – Cacheing

cevap

10

ASCII aralığının dışında verilerle bir Excel sayfası okuyorsunuz.

Bir CSV dosyasına unicode değerleri yazılırken, otomatik kodlama gerçekleşir, ancak başarısız olan ASCII karakter aralığı dışındaki değerler için. Python 3 (str() ve range() kullanarak),

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

ya: açıkça kodlayın

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

İhtiyaçlarınıza bağlı olarak farklı bir kodlama almak gerekebilir.

+0

Bu hatayı aldım: 'AttributeError: 'float' nesnesinin 'encode' özelliği yoktur. Sadece String'den ziyade farklı türde veri var gibi görünüyor. Peki bu farklı veri türlerini nasıl ele alabilirim. – Cacheing

+0

Benim güncelleştirme ile dene :-) –

+0

Bu harika çalışıyor! Teşekkürler. – Cacheing

İlgili konular