pythonpython-3.xpandasdataframevalueerror

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


I am not sure why I am getting this error although sometimes my code works fine!

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- The code to find all xlsx files in a folder and read them:

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

I added the engine openpyxl

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

Now I got a different error:

BadZipFile: File is not a zip file

pandas version: 1.3.0 python version: python3.9 os: MacOS

is there a better way to read all xlsx files from a folder ?


Solution

  • Found it. When an excel file is opened for example by MS excel a hidden temporary file is created in the same directory:

    ~$datasheet.xlsx
    

    So, when I run the code to read all the files from the folder it gives me the error:

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

    When all files are closed and no hidden temporary files ~$filename.xlsx in the same directory the code works perfectly.