添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

PANDAS & glob - 无法确定Excel文件格式,你必须手动指定一个引擎

20 人关注

我不知道为什么会出现这样的错误,虽然有时我的代码工作得很好!但我不知道为什么会出现这样的错误。

Excel file format cannot be determined, you must specify an engine manually.

Here below is my code with steps:

1- list of columns of customers Id:

customer_id = ["ID","customer_id","consumer_number","cus_id","client_ID"]

2- 找到一个文件夹中的所有xlsx文件并读取它们的代码。

l = [] #use a list and concat later, faster than append in the loop
for f in glob.glob("./*.xlsx"):
    df = pd.read_excel(f).reindex(columns=customer_id).dropna(how='all', axis=1)
    df.columns = ["ID"] # to have only one column once concat
    l.append(df)
all_data  = pd.concat(l, ignore_index=True) # concat all data

我添加了发动机openpyxl

df = pd.read_excel(f, engine="openpyxl").reindex(columns = customer_id).dropna(how='all', axis=1)

现在我得到了一个不同的错误。

BadZipFile: File is not a zip file

pandas版本:1.3.0 python版本: python3.9 操作系统: MacOS

是否有更好的方法来读取一个文件夹中的所有xlsx文件?

1 个评论
我在linux上也遇到了同样的问题,原因就像@pirateofebay说的那样。有一些临时文件是隐藏的。我通过使用pd.ExcelWriter来打开所有相关的文件,然后使用writer.close()来逐个关闭它们,就解决了这个问题。然后我们就好了,你可以按照你的意愿使用pd.read_excel。
python
python-3.x
pandas
dataframe
MTALY
MTALY
发布于 2021-07-22
8 个回答
MTALY
MTALY
发布于 2022-05-10
已采纳
0 人赞同

发现了它。当一个excel文件被打开时,例如被MS excel打开,一个隐藏的临时文件会在同一目录下被创建。

~$datasheet.xlsx

因此,当我运行代码从文件夹中读取所有的文件时,它给了我一个错误。

Excel file format cannot be determined, you must specify an engine manually.

当所有的文件都被关闭并且没有隐藏的临时文件~$filename.xlsx在同一目录下,代码工作得很完美。

pirateofebay
pirateofebay
发布于 2022-05-10
0 人赞同

还要确保你使用的是正确的 pd.read_* 方法。我在试图用 read_excel() 而不是 read_csv() 打开一个 .csv 文件时遇到了这个错误。我发现了这个方便的片段 here 以按Excel文件类型自动选择正确的方法。

if file_extension == 'xlsx':
    df = pd.read_excel(file.read(), engine='openpyxl')
elif file_extension == 'xls':
    df = pd.read_excel(file.read())
elif file_extension == 'csv':
    df = pd.read_csv(file.read())
    
TimTiger
TimTiger
发布于 2022-05-10
0 人赞同

https://stackoverflow.com/a/32241271/17411729

关于如何删除隐藏文件的答案链接

Mac = 转到文件夹,按cmd + shift + . 将显示隐藏的文件,删除它,再运行它。

谢谢你指出了一个可能重复的问题。然而,有两件事你可以考虑。1)只作为问题的评论提及,而不是回答 2)如果你提到的SO页面中的解决方案不完全相同,你也应该包括你采取的步骤,而不仅仅是链接
谢谢你让我意识到这一点,我下次会尽量记住:)很想把我的答案搬到评论中去,不幸的是,在我得到50个代表之前,我不允许发表评论。
tbullock
tbullock
发布于 2022-05-10
0 人赞同

在macOS中,每个文件夹中都会自动生成一个名为".DS_Store "的 "隐形文件"。对我来说,这就是问题的根源。我通过一个if语句解决了这个问题,绕过了 "看不见的文件"(它不是xlsx,所以会触发错误)。

for file in os.scandir(test_folder):
    filename = os.fsdecode(file)
    if '.DS_Store' not in filename:
        execute_function(file)
    
fang aa
fang aa
发布于 2022-05-10
0 人赞同

当我手动将'CSV'后缀改为'XLS'时,我也得到了'Excel文件格式...'的错误。 我所要做的就是打开excel,并将其保存为我想要的格式。

Mohammed
Mohammed
发布于 2022-05-10
0 人赞同

看起来这个问题很容易解决。进入你的excel文件,无论它是xls或xlsx或任何其他扩展名,并从文件图标上做 "另存为"。当提示有选项时。将其保存为CSV UTF-8(逗号分隔)(*.csv)

Zahra
Zahra
发布于 2022-05-10
0 人赞同

在我的例子中,我使用了 xlrd 。所以在终端。

pip install xlrd

如果没有安装pandas,请安装它。

pip install pandas

现在以这种方式读取excel文件。

import pandas as pd
df = pd.read_excel("filesFolder/excelFile.xls", engine='xlrd')
    
MinneapolisCoder9
MinneapolisCoder9
发布于 2022-05-10
0 人赞同

你可以通过检查文件是否以"~"开头来过滤掉不需要的临时文件。

import os