Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 合并或连接数百个Excel文件_Python_Excel_Pandas_Openpyxl_Xlrd - Fatal编程技术网

Python 合并或连接数百个Excel文件

Python 合并或连接数百个Excel文件,python,excel,pandas,openpyxl,xlrd,Python,Excel,Pandas,Openpyxl,Xlrd,我在一个目录中有638个Excel文件,每个文件大约有3000 KB大。我想把它们连接在一起,希望只使用Python或命令行,而不使用其他编程软件或语言 本质上,这是一个更大的过程的一部分,它涉及一些简单的数据操作,我希望通过运行一个python文件或双击批处理文件来实现这一切 我试过下面代码的变体——Pandas、openpyxl和xlrd,它们的速度似乎差不多。转换为csv似乎需要VBA,我不想进入其中 temp_list=[] for filename in os.listdir(file

我在一个目录中有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文档?或者,仅仅使用基本库读取单个文件就可以了?

.xlsx是一种非常复杂的格式,多年来积累了许多特性和怪癖,因此很难解析。而且它的设计从来不是为了速度或大量数据,而是为了方便商务人员使用

因此,根据您的文件数量,您最好将其转换为.csv或其他易于解析的格式,或者首先使用这种格式进行数据交换—最好在处理它们之前这样做—例如,在文件到达时

例如,这就是如何使用pywin32将.xlsx的第一页保存为.csv,方法如下:

并行运行此操作通常不会产生任何效果,因为。您可以根据为每个批次强制创建不同的流程。

。xlsx是一种非常复杂的格式,多年来积累了许多特性和怪癖,因此很难解析。而且它的设计从来不是为了速度或大量数据,而是为了方便商务人员使用

因此,根据您的文件数量,您最好将其转换为.csv或其他易于解析的格式,或者首先使用这种格式进行数据交换—最好在处理它们之前这样做—例如,在文件到达时

例如,这就是如何使用pywin32将.xlsx的第一页保存为.csv,方法如下:



并行运行此操作通常不会产生任何效果,因为。您可以根据为每个批次强制创建不同的流程。

因此,据我所知,您最大的问题是处理速度?是的,就是这样。我想您可以将其并行化,仅此而已。与其使用df.append,不如尝试将Excel文件导入dfs数组,然后使用pd.concat将其合并。如果您不想与vba发生冲突,还可以使用powershell将其解析为csv。这其实很简单。在只读和值只读模式下很难在速度上打败openpyxl。所以从我的理解来看,你们最大的问题是处理速度?是的,就是这个。我想您可以将其并行化,仅此而已。与其使用df.append,不如尝试将Excel文件导入dfs数组,然后使用pd.concat将其合并。如果您不想与vba发生冲突,还可以使用powershell将其解析为csv。这其实很简单。在只读和仅值模式下,很难在速度上击败openpyxl。为了补充这个答案,您可以尝试找到一个非python命令行工具,它可以将xlsx文件转换为csv或tsv,而且速度非常快,因为它是用比python更快的语言编写的,然后使用一个简单的cat连接转换后的文件,确保省略了头!。理想情况下,您希望在一次调用中接受多个文件名或通配符模式。查看其中一些选项:@Avish Python的速度与此无关,因为所有繁重的工作都是由Excel完成的。如果您使用Excel的COM接口读取XLSX,则可以在Excel中完成。OP使用pandas read_excel,我希望是这样?不是使用Excel读取文件,而是使用其他实现。我试图建议使用其他命令行工具阅读它,它比Excel或pandas读取Excel文件更快。它似乎是工作簿中的文件路径。出于某种原因,将默认值添加到用户/用户/文档,即使我的所有文件和代码都位于与文档完全分离的路径中。这会导致一个com_错误,询问我文件是否已被移动或替换。这是否与达到这一点的任何步骤有关,如win32com.client.gencache.excel.Application?@ksoangxhc是的,您需要传递完整路径,请查看原因。我还将代码更改为使用Open。AddWithParameter用于从模板创建,这是我在上一个项目中所做的,所以它有点卡在我的脑海中;不过,在您的特定用例中没有什么不同。为了补充这个答案,您可以尝试找到一个非python的命令行工具,该工具可以将xlsx文件转换为csv或tsv,而且转换速度非常快,因为它是用比python更快的语言编写的,然后使用一个简单的cat连接转换后的文件。请确保省略标题!。理想情况下你会想要一些
在一次调用中接受多个文件名或通配符模式的调用。查看其中一些选项:@Avish Python的速度与此无关,因为所有繁重的工作都是由Excel完成的。如果您使用Excel的COM接口读取XLSX,则可以在Excel中完成。OP使用pandas read_excel,我希望是这样?不是使用Excel读取文件,而是使用其他实现。我试图建议使用其他命令行工具阅读它,它比Excel或pandas读取Excel文件更快。它似乎是工作簿中的文件路径。出于某种原因,将默认值添加到用户/用户/文档,即使我的所有文件和代码都位于与文档完全分离的路径中。这会导致一个com_错误,询问我文件是否已被移动或替换。这是否与达到这一点的任何步骤有关,如win32com.client.gencache.excel.Application?@ksoangxhc是的,您需要传递完整路径,请查看原因。我还将代码更改为使用Open。AddWithParameter用于从模板创建,这是我在上一个项目中所做的,所以它有点卡在我的脑海中;不过,在您的特定用例中没有区别。
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)