合并或连接数百个 Excel 文件



我在一个目录中有 638 个 Excel 文件,每个文件大约 3000 KB 大。我想将它们连接在一起,希望只使用 Python 或命令行(没有其他编程软件或语言(。

从本质上讲,这是一个涉及一些简单数据操作的更大过程的一部分,我希望通过运行单个python文件(或双击批处理文件(就可以完成所有操作。

我已经尝试了以下代码的变体 - Pandas,openpyxl和xlrd,它们似乎具有相同的速度。转换为csv似乎需要VBA,我不想进入。

temp_list=[]
for filename in os.listdir(filepath):
    temp = pd.read_excel(filepath + filename,
                        sheet_name=X, usecols=fields)
    temp_list.append(temp)

是否有更简单的命令行解决方案将它们转换为 csv 文件或合并到一个 excel 文档中?或者这差不多,只是使用基本库来读取单个文件?

.xls(x)是一种非常(过度(复杂的格式,多年来积累了许多功能和怪癖,因此很难解析。它从来不是为速度或大量数据而设计的,而是为了便于商务人士使用而设计的。

因此,对于您的文件数量,最好的选择是将它们转换为.csv或其他易于解析的格式(或者首先使用这种格式进行数据交换( - 最好在处理它们之前执行此操作 - 例如,在文件到达时。

例如,这是使用Excel的COM界面保存.xls(x)的第一张以pywin32 .csv的方法:

import win32com.client
# Need the typelib metadata to have Excel-specific constants
x = win32com.client.gencache.EnsureDispatch("Excel.Application")
# Need to pass full paths, see https://stackoverflow.com/questions/16394842/excel-can-only-open-file-if-using-absolute-path-why
w = x.Workbooks.Open("<full path to file>")
s = w.Worksheets(1)
s.SaveAs("<full path to file without extension>",win32com.client.constants.xlCSV)
w.Close(False)

并行运行通常不会产生任何效果,因为将重用相同的服务器进程。您可以按照如何强制 python(使用 win32com(创建一个新的 excel 实例?强制为每个批次创建不同的进程。

最新更新