王大可2000 发表于 2023-7-20 18:38:18

转换文件格式

运用Python将文件夹out中所有.xls文件转化为.xlsx文件并去掉第一列
import os
import pandas as pd

# 指定文件夹路径
folder_path = 'F:/code/out/'

# 获取文件夹中所有的.xls文件
files =

# 遍历每个文件
for file in files:
    # 构建文件的完整路径
    file_path = os.path.join(folder_path, file)

    # 读取.xls文件为字典,其中key为工作表名,value为对应的DataFrame
    xls_dict = pd.read_excel(file_path, sheet_name=None)

    # 遍历每个工作表
    for sheet_name, df in xls_dict.items():
      # 去掉第一列
      df = df.iloc[:, 1:]

      # 将修改后的DataFrame保存到字典中
      xls_dict = df

    # 构建新的文件名
    new_file_name = os.path.splitext(file) + '.xlsx'

    # 保存为.xlsx文件
    new_file_path = os.path.join(folder_path, new_file_name)
    with pd.ExcelWriter(new_file_path) as writer:
      for sheet_name, df in xls_dict.items():
            df.to_excel(writer, sheet_name=sheet_name, index=False)

    # 删除旧的.xls文件
    os.remove(file_path)

print("转换完成!")
为什么出现以下错误该如何修改
ValueError: Excel file format cannot be determined, you must specify an engine manually.

陶远航 发表于 2023-7-20 18:38:27

本帖最后由 陶远航 于 2023-7-20 21:02 编辑

你好,小朋友!出现这个错误是因为 Pandas 在读取文件时无法确定文件的格式,需要手动指定一个引擎。

你可以尝试修改代码,在 pd.read_excel 方法中添加 engine='openpyxl' 参数,以强制指定使用 Openpyxl 引擎进行读取,如下所示:

xls_dict = pd.read_excel(file_path, sheet_name=None, engine='openpyxl')


这样就可以解决 "ValueError: Excel file format cannot be determined" 的问题了。

祝你成功转换文件格式!如果还有其他问题,请随时向我提问。

Mike_python小 发表于 2023-7-20 18:38:35

出现该错误是因为 pd.read_excel() 函数无法确定所读取的文件格式,需要手动指定引擎(engine)。在你的代码中,可以添加一个 engine 参数来解决这个问题。

修改后的代码如下:


import os
import pandas as pd

# 指定文件夹路径
folder_path = 'F:/code/out/'

# 获取文件夹中所有的.xls文件
files =

# 遍历每个文件
for file in files:
    # 构建文件的完整路径
    file_path = os.path.join(folder_path, file)

    # 读取.xls文件为字典,其中key为工作表名,value为对应的DataFrame
    xls_dict = pd.read_excel(file_path, sheet_name=None, engine='openpyxl')

    # 遍历每个工作表
    for sheet_name, df in xls_dict.items():
      # 去掉第一列
      df = df.iloc[:, 1:]

      # 将修改后的DataFrame保存到字典中
      xls_dict = df

    # 构建新的文件名
    new_file_name = os.path.splitext(file) + '.xlsx'

    # 保存为.xlsx文件
    new_file_path = os.path.join(folder_path, new_file_name)
    with pd.ExcelWriter(new_file_path, engine='openpyxl') as writer:
      for sheet_name, df in xls_dict.items():
            df.to_excel(writer, sheet_name=sheet_name, index=False)

    # 删除旧的.xls文件
    os.remove(file_path)

print("转换完成!")


在 pd.read_excel() 和 pd.ExcelWriter() 函数中添加了 engine='openpyxl' 参数,显式指定使用 openpyxl 引擎处理Excel文件。

这样就可以解决 "ValueError: Excel file format cannot be determined, you must specify an engine manually." 的问题。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}

isdkz 发表于 2023-7-20 18:38:41

此错误可能是因为你试图使用pandas的 read_excel 方法读取.xls文件,但是没有指定一个处理.xls文件的适当引擎。pandas的 read_excel 方法使用两个主要引擎, openpyxl 和 xlrd 。默认情况下, .xlsx 文件使用 openpyxl , .xls 文件使用 xlrd 。然而,从xlrd版本 2.0.0 开始,不再支持.xls文件,只支持.xlsx文件。

因此,你需要安装一个支持读取.xls文件的库。你可以选择 xlrd<2.0 或者 pyxlsb 。下面是如何进行安装的代码:


pip install 'xlrd==1.2.0'

或者

pip install pyxlsb


然后,在你的代码中指定这个引擎:


# 读取.xls文件为字典,其中key为工作表名,value为对应的DataFrame
xls_dict = pd.read_excel(file_path, sheet_name=None, engine='xlrd')# 如果你安装了xlrd<2.0

或者

# 读取.xls文件为字典,其中key为工作表名,value为对应的DataFrame
xls_dict = pd.read_excel(file_path, sheet_name=None, engine='pyxlsb')# 如果你安装了pyxlsb

这样应该就可以解决你的问题了。如果仍然存在问题,请随时提问。

王大可2000 发表于 2023-7-20 18:48:22

isdkz 发表于 2023-7-20 18:38
此错误可能是因为你试图使用pandas的 read_excel 方法读取.xls文件,但是没有指定一个处理.xls文件的适当引 ...

为什么会出现以下问题
raise XLRDError('Unsupported format, or corrupt file: ' + msg)
xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; found b'<?xml ve'

sfqxx 发表于 2023-7-20 19:14:37

该错误通常在pandas库的`read_excel()`函数无法判断Excel文件的格式时发生。你在这里处理的是.xls文件,这是一种旧的Excel文件格式,通常需要一种名为`xlrd`的库来读取。

由于pandas 1.2.0及以上版本不再支持使用`xlrd`库读取.xls文件,所以如果你的pandas库版本为1.2.0或更高,你需要使用`openpyxl`或`xlrd`来读取.xls文件。

以下是你的代码的修改版本,使用`xlrd`库来读取.xls文件:

import os
import pandas as pd

# 指定文件夹路径
folder_path = 'F:/code/out/'

# 获取文件夹中所有的.xls文件
files =

# 遍历每个文件
for file in files:
    # 构建文件的完整路径
    file_path = os.path.join(folder_path, file)

    # 读取.xls文件为字典,其中key为工作表名,value为对应的DataFrame
    # 指定engine为'xlrd'以读取.xls文件
    xls_dict = pd.read_excel(file_path, sheet_name=None, engine='xlrd')

    # 遍历每个工作表
    for sheet_name, df in xls_dict.items():
        # 去掉第一列
        df = df.iloc[:, 1:]

        # 将修改后的DataFrame保存到字典中
        xls_dict = df

    # 构建新的文件名
    new_file_name = os.path.splitext(file) + '.xlsx'

    # 保存为.xlsx文件
    new_file_path = os.path.join(folder_path, new_file_name)
    with pd.ExcelWriter(new_file_path) as writer:
        for sheet_name, df in xls_dict.items():
            df.to_excel(writer, sheet_name=sheet_name, index=False)

    # 删除旧的.xls文件
    os.remove(file_path)

print("转换完成!")

请确保已经安装了`xlrd`库。如果没有,你可以使用以下命令进行安装:

pip install xlrd

如果你的pandas库的版本低于1.2.0,那么默认情况下应该是可以直接读取.xls文件的。如果仍然出现这个错误,那可能是你的.xls文件有问题,比如文件损坏或者不是有效的.xls文件。

求最佳答案{:10_254:} ,谢谢啦
页: [1]
查看完整版本: 转换文件格式