Lal*_*tar 47 python csv excel xls export-to-csv
我在python中使用win32.client将.xlsx和.xls文件转换为.csv.当我执行此代码时,它会给出错误.我的代码是:
def convertXLS2CSV(aFile):
'''converts a MS Excel file to csv w/ the same name in the same directory'''
print "------ beginning to convert XLS to CSV ------"
try:
import win32com.client, os
from win32com.client import constants as c
excel = win32com.client.Dispatch('Excel.Application')
fileDir, fileName = os.path.split(aFile)
nameOnly = os.path.splitext(fileName)
newName = nameOnly[0] + ".csv"
outCSV = os.path.join(fileDir, newName)
workbook = excel.Workbooks.Open(aFile)
workbook.SaveAs(outCSV, c.xlCSVMSDOS) # 24 represents xlCSVMSDOS
workbook.Close(False)
excel.Quit()
del excel
print "...Converted " + nameOnly + " to CSV"
except:
print ">>>>>>> FAILED to convert " + aFile + " to CSV!"
convertXLS2CSV("G:\\hello.xlsx")
Run Code Online (Sandbox Code Playgroud)
我无法在此代码中找到错误.请帮忙.
Ben*_*hes 62
我会使用xlrd - 它更快,跨平台并直接与文件一起工作.有一点需要注意 - 它不适用于xlsx文件 - 所以你必须将你的Excel文件保存为xls. 编辑:从0.8.0版开始,xlrd读取XLS和XLSX文件.
import xlrd
import csv
def csv_from_excel():
wb = xlrd.open_workbook('your_workbook.xls')
sh = wb.sheet_by_name('Sheet1')
your_csv_file = open('your_csv_file.csv', 'wb')
wr = csv.writer(your_csv_file, quoting=csv.QUOTE_ALL)
for rownum in xrange(sh.nrows):
wr.writerow(sh.row_values(rownum))
your_csv_file.close()
Run Code Online (Sandbox Code Playgroud)
phi*_*ilE 47
我会用pandas.计算量很大的部分是用cython或c-extension编写的,以加快进程,语法非常干净.例如,如果你想从文件"your_workbook.xls"到文件"your_csv.csv"转"工作表Sheet1",你只需要使用顶级函数read_excel和方法to_csv从DataFrame类,如下所示:
import pandas as pd
data_xls = pd.read_excel('your_workbook.xls', 'Sheet1', index_col=None)
data_xls.to_csv('your_csv.csv', encoding='utf-8')
Run Code Online (Sandbox Code Playgroud)
设置encoding='utf-8'缓解了UnicodeEncodeError其他答案中提到的内容.
and*_*abs 35
也许有人发现这个随时可用的代码片段很有用.它允许从Excel工作簿中的所有电子表格创建CSV.

# -*- coding: utf-8 -*-
import xlrd
import csv
from os import sys
def csv_from_excel(excel_file):
workbook = xlrd.open_workbook(excel_file)
all_worksheets = workbook.sheet_names()
for worksheet_name in all_worksheets:
worksheet = workbook.sheet_by_name(worksheet_name)
with open(u'{}.csv'.format(worksheet_name), 'wb') as your_csv_file:
wr = csv.writer(your_csv_file, quoting=csv.QUOTE_ALL)
for rownum in xrange(worksheet.nrows):
wr.writerow([unicode(entry).encode("utf-8") for entry in worksheet.row_values(rownum)])
if __name__ == "__main__":
csv_from_excel(sys.argv[1])
Run Code Online (Sandbox Code Playgroud)
小智 21
我使用csvkit,它使用xlrd(用于xls)和openpyxl(用于xlsx)将几乎任何表格数据转换为csv.
安装后,依赖于它,这是一个问题:
python in2csv myfile > myoutput.csv
Run Code Online (Sandbox Code Playgroud)
它会处理所有格式检测问题,因此您可以将其传递给任何表格数据源.它也是跨平台的(没有win32依赖).
首先将您的 Excel 电子表格读入 Pandas,下面的代码会将您的 Excel 电子表格作为 OrderedDict 类型导入 Pandas,其中包含您的所有工作表作为数据框。然后只需使用 worksheet_name 作为键来访问特定工作表作为数据框,并使用 df.to_csv() 仅将所需工作表保存为 csv 文件。希望这会在你的情况下锻炼。
import pandas as pd
df = pd.read_excel('YourExcel.xlsx', sheet_name=None)
df['worksheet_name'].to_csv('YourCsv.csv')
Run Code Online (Sandbox Code Playgroud)
如果您的 Excel 文件只包含一张工作表,那么只需使用以下代码:
import pandas as pd
df = pd.read_excel('YourExcel.xlsx')
df.to_csv('YourCsv.csv')
Run Code Online (Sandbox Code Playgroud)
如果有人想将所有 excel 工作表从单个 excel 工作簿转换为不同的 csv 文件,请尝试以下代码:
import pandas as pd
def excelTOcsv(filename):
df = pd.read_excel(filename, sheet_name=None)
for key, value in df.items():
return df[key].to_csv('%s.csv' %key)
Run Code Online (Sandbox Code Playgroud)
此功能可用作多个 csv 文件转换器的同一 excel 工作簿的多个 Excel 工作表。其中键是工作表名称,值是工作表内的内容。
| 归档时间: |
|
| 查看次数: |
121109 次 |
| 最近记录: |