我正在使用带有xlrd和csv模块的Python 3.3将xls文件转换为csv。这是我的代码:
import xlrd
import csv
def csv_from_excel():
wb = xlrd.open_workbook('MySpreadsheet.xls')
sh = wb.sheet_by_name('Sheet1')
your_csv_file = open('test_output.csv', 'wb')
wr = csv.writer(your_csv_file, quoting=csv.QUOTE_ALL)
for rownum in range(sh.nrows):
wr.writerow(sh.row_values(rownum))
your_csv_file.close()
我收到此错误:TypeError: 'str' does not support the buffer interface
我尝试更改编码并用以下内容替换循环内的行:
wr.writerow(bytes(sh.row_values(rownum),'UTF-8'))
但是我收到了这个错误:TypeError: encoding or errors without a string argument
任何人都知道可能出现的问题?
答案 0 :(得分:4)
试试这个
import xlrd
import csv
def csv_from_excel():
wb = xlrd.open_workbook('MySpreadsheet.xlsx')
sh = wb.sheet_by_name('Sheet1')
your_csv_file = open('output.csv', 'w', encoding='utf8')
wr = csv.writer(your_csv_file, quoting=csv.QUOTE_ALL)
for rownum in range(sh.nrows):
wr.writerow(sh.row_values(rownum))
your_csv_file.close()
答案 1 :(得分:3)
我建议使用pandas库来完成此任务
import pandas as pd
xls = pd.ExcelFile('file.xlsx')
df = xls.parse(sheetname="Sheet1", index_col=None, na_values=['NA'])
df.to_csv('file.csv')
答案 2 :(得分:1)
您的问题基本上是您使用Python2语义打开文件。 Python3是区域设置感知的,所以如果您只想将文本写入此文件(并且确实如此),请将其打开为具有正确选项的文本文件:
your_csv_file = open('test_output.csv', 'w', encoding='utf-8', newline='')
encoding参数指定输出编码(它不必是utf-8),csv的Python3文档明确指出你应该为csv文件对象指定newline=''
。
答案 3 :(得分:1)