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

jm2pwxwz  于 2023-11-15  发布在  其他
关注(0)|答案(9)|浏览(118)

我不知道为什么我得到这个错误,虽然有时我的代码工作正常!
第一个月
下面是我的代码和步骤:
1-客户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文件从一个文件夹?

xqkwcwgp

xqkwcwgp1#

找到了。当一个Excel文件被打开时,例如MS Excel,一个隐藏的临时文件被创建在同一个目录中:

~$datasheet.xlsx

字符串
所以,当我运行代码从文件夹中读取所有文件时,它会给我错误:

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


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

332nm8kg

332nm8kg2#

另外,请确保您使用的是正确的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())

字符串

vq8itlhq

vq8itlhq3#

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

pip install xlrd

字符串
如果未安装pandas,请安装它:

pip install pandas


现在这样读取Excel文件:

import pandas as pd

df = pd.read_excel("filesFolder/excelFile.xls", engine='xlrd')

ddhy6vgd

ddhy6vgd4#

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

import os

for file in os.listdir(folder path):
    if not file.startswith("~") and file.endswith(".xlsx"):
        print(file)

字符串

vcudknz3

vcudknz35#

https://stackoverflow.com/a/32241271/17411729
链接到如何删除隐藏文件的答案
Mac =转到文件夹,按cmd + shift +。将显示隐藏的文件,删除它,运行它回来。

anhgbhbe

anhgbhbe6#

在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)

字符串

whlutmcx

whlutmcx7#

当我手动将“CSV”后缀更改为“XLS”时,我还得到了一个“Excel文件格式.”错误。我所要做的就是打开Excel并保存为我想要的格式。

ryhaxcpt

ryhaxcpt8#

看起来很容易解决这个问题。转到您的Excel文件,无论它是xls或xlsx或任何其他扩展名,并从文件图标中执行“保存为”。当提示选项时。保存为CSV UTF-8(逗号分隔)(*.csv)

vojdkbi0

vojdkbi09#

对我来说,没有像~$Excel heet.xlsx这样的临时Excel文件。但是.当我不小心在Excel中打开其中一个文件时,不知何故,Excel使该文件无法使用。当我试图再次用Excel打开它时,我意识到这一点,Excel也无法打开它。所以我不得不再次获取该文件,这解决了问题。

相关问题