簡體   English   中英

python xlrd 將 xlsx 轉換為 csv

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM