合并或连接数百个Excel文件

时间:2019-04-08 19:42:31

标签: python excel pandas openpyxl xlrd

我的目录中有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文档?还是仅使用基本库读取单个文件就可以了?

1 个答案:

答案 0 :(得分:3)

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

因此,考虑到文件数量,最好的选择是将其转换为.csv或其他易于解析的格式(或首先使用这种格式进行数据交换),并且最好是,在您处理它们之前 文件到达后。

例如这样可以使用Excel's COM interface.xls(x)的第一张纸和.csv保存到pywin32

import win32com.client
# need the typelib metadata to have Excel-specific constants
x = win32com.client.gencache.EnsureDispatch("Excel.Application")
w = x.Workbooks.Open("<file>")
s = w.Worksheets(1)
s.SaveAs("<file without extension>",win32com.client.constants.xlCSV)
w.Close(False)

因为the same server process would be reused,所以并行运行此命令通常无效。您可以按照How can I force python(using win32com) to create a new instance of excel?强制为每个批次创建不同的过程。

相关问题