Python脚本读取一个目录中的多个excel文件,并将其转换为另一个目录中的.csv文件

我相对较新的python和Stackoverflow,但希望任何人都可以摆脱我目前的问题。 我有一个python脚本,从一个目录中获取excel文件(.xls和.xlsx),并将它们转换为.csv文件到另一个目录。 它对我的示例excel文件(包括4列和1行为testing目的)的工作完全正常,但是当我尝试运行我的脚本对具有Excel文件(文件大小更大)的不同目录时,我得到断言错误。 我附上我的代码和错误。 期待对这个问题有一些指导。 谢谢!

import os import pandas as pd source = "C:/.../TestFolder" output = "C:/.../OutputCSV" dir_list = os.listdir(source) os.chdir(source) for i in range(len(dir_list)): filename = dir_list[i] book = pd.ExcelFile(filename) #writing to csv if filename.endswith('.xlsx') or filename.endswith('.xls'): for i in range(len(book.sheet_names)): df = pd.read_excel(book, book.sheet_names[i]) os.chdir(output) new_name = filename.split('.')[0] + str(book.sheet_names[i])+'.csv' df.to_csv(new_name, index = False) os.chdir(source) print "New files: ", os.listdir(output) 

在终端中执行此脚本时收到的错误消息如下所示:

由于您使用Windows,请考虑使用Jet / ACE SQL引擎(Windows .dll文件)查询Excel工作簿并将其导出为CSV文件,从而绕过使用“pandas”数据框加载/导出的需求。

具体来说,使用pyodbc使ODBC连接到Excel文件,遍历每个工作表,并使用SELECT * INTO ... SQL操作查询导出到CSV文件。 openpyxl模块用于检索表单名称。 下面的脚本不依赖相对path,所以可以从任何地方运行。 假定每个Excel文件都有完整的标题列(在顶行的使用范围内没有缺失的单元格)。

 import os import pyodbc from openpyxl import load_workbook source = "C:/Path/To/TestFolder" output = "C:/Path/To/OutputCSV" dir_list = os.listdir(source) for xlfile in dir_list: strfile = os.path.join(source, xlfile) if strfile.endswith('.xlsx') or strfile.endswith('.xls'): # CONNECT TO WORKBOOK conn = pyodbc.connect(r'Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};' + \ 'DBQ={};'.format(strfile), autocommit=True) # RETRIEVE WORKBOOK SHEETS sheets = load_workbook(filename = strfile, use_iterators = True).get_sheet_names() # ITERATIVELY EXPORT SHEETS TO CSV IN OUTPUT FOLDER for s in sheets: outfile = os.path.join(output, '{0}_{1}.csv'.format(xlfile.split('.')[0], s)) if os.path.exists(outfile): os.remove(outfile) strSQL = " SELECT * " + \ " INTO [text;HDR=Yes;Database={0};CharacterSet=65001].[{1}]" + \ " FROM [{2}$]" conn.execute(strSQL.format(output, os.path.basename(outfile, s)) conn.close() 

**注意:这个过程会创build一个schema.ini文件,并与每个迭代连接起来。 可以删除。