我对python和Stackoverflow比较陌生,但希望任何人都能对我目前的问题有所了解。我有一个python脚本,可以接收excel文件(.xls和.xlsx),并将它们转换为.csv文件到另一个目录。它在我的示例excel文件上工作得非常好(由4列和1行组成,用于测试目的),但当我尝试对包含excel文件的其他目录运行脚本时(文件大很多)我得到一个Assert错误。我已经附上了我的代码和错误。期待有一些指导这个问题。谢谢!
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)
1条答案
按热度按时间n1bvdmb61#
由于您使用Windows,请考虑使用Jet/ACE SQL引擎(Windows .dll文件)来查询Excel工作簿并导出到CSV文件,从而绕过使用Pandas Dataframe 加载/导出的需求。
具体来说,使用
pyodbc
建立到Excel文件的ODBC连接,使用SELECT * INTO ...
SQL操作查询迭代每个工作表并导出到csv文件。openpyxl
模块用于检索工作表名称。下面的脚本不依赖于相对路径,因此可以从任何地方运行。假设每个Excel文件都有完整的标题列(在顶行的使用范围内没有缺失的单元格)。**注意:此过程创建一个
schema.ini
文件,该文件与每个迭代连接。可以删除。