2013-08-07 40 views
5

Tôi đang cố gắng chuyển đổi tệp excel thành tệp csv bằng cách sử dụng thư viện xlrd.python xlrd chuyển đổi xlsx thành csv

Nhưng tôi đã nhận lỗi này:

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

Nó có thể là do file excel là quá lớn? Nguyên nhân là mọi thứ hoạt động tốt với các tệp excel có số lượng hàng nhỏ. Nhưng khi tôi cố gắng chuyển đổi một tệp excel có gần 2000 hàng, tôi gặp lỗi này.

[UPDATE]

Đây là mã:

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

Và đây là 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

Vui lòng hiển thị cho chúng tôi mã và truy nguyên đầy đủ; điều này không phải do kích thước bảng tính. –

+0

@MartijnPieters: Tôi vừa cập nhật mã và truy xuất lại. Cảm ơn. – Cacheing

Trả lời

10

Bạn đang đọc một tờ với dữ liệu Excel ngoài phạm vi ASCII.

Khi ghi giá trị unicode vào tệp CSV, mã hóa tự động diễn ra, nhưng đối với các giá trị ngoài phạm vi ký tự ASCII không thành công. Mã hóa một cách rõ ràng:

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

hoặc, đối với Python 3 (sử dụng str()range()):

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

Bạn có thể cần phải chọn một mã hóa khác nhau, tùy thuộc vào nhu cầu của bạn.

+0

Tôi gặp lỗi này: đối tượng 'AttributeError: 'float' không có thuộc tính 'encode''. Dường như tôi có các loại dữ liệu khác nhau chứ không phải chỉ là Chuỗi. Vậy làm thế nào tôi có thể xử lý các loại dữ liệu khác nhau. – Cacheing

+0

Hãy thử với bản cập nhật của tôi :-) –

+0

Công trình này tuyệt vời! Cảm ơn. – Cacheing

Các vấn đề liên quan