[英]python xlrd convert xlsx to csv
我正在嘗試使用xlrd
庫將 excel 文件轉換為 csv 文件。
但我收到了這個錯誤:
UnicodeEncodeError: 'ascii' codec can't encode character u'\ł' in position 2: ordinal not in range(128)
會不會是excel文件太大的原因? 因為對於行數較少的 excel 文件,一切正常。 但是當我嘗試轉換一個有近 2000 行的 excel 文件時,我收到了這個錯誤。
[更新]
這是代碼:
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()
這是回溯:
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)
您正在讀取數據超出 ASCII 范圍的 Excel 工作表。
將 unicode 值寫入 CSV 文件時,會發生自動編碼,但對於 ASCII 字符范圍之外的值會失敗。 顯式編碼:
for rownum in xrange(sheet.nrows):
wr.writerow([unicode(val).encode('utf8') for val in sheet.row_values(rownum)])
在 Python 3 上,CSV 模塊支持 Unicode 文本,前提是您為open()
命令提供了合適的編碼並以文本模式打開文件。 雖然默認可以是 UTF-8,但最好是明確的。 該文檔建議您在打開用於 CSV 寫入的文件時使用newline=''
:
fp = open(os.path.join(filepath, 'result.csv'), 'w', encoding='utf-8', newline='')
wr = csv.writer(fp, quoting=csv.QUOTE_ALL)
for rownum in range(sheet.nrows):
wr.writerow(sheet.row_values(rownum))
您可能需要根據需要選擇不同的編碼。
將文件對象用作上下文管理器以確保它在代碼退出后關閉(有或沒有異常)也是一個好主意:
with open(os.path.join(filepath, 'result.csv'), 'w', encoding='utf-8', newline='') as fp:
wr = csv.writer(fp, quoting=csv.QUOTE_ALL)
for rownum in range(sheet.nrows):
wr.writerow(sheet.row_values(rownum))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.