鱼C论坛

 找回密码
 立即注册
查看: 1548|回复: 5

转换文件格式

[复制链接]
发表于 2023-7-20 18:38:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

# 获取文件夹中所有的.xls文件
files = [f for f in os.listdir(folder_path) if f.endswith('.xls')]

# 遍历每个文件
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[sheet_name] = df

    # 构建新的文件名
    new_file_name = os.path.splitext(file)[0] + '.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.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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" 的问题了。

祝你成功转换文件格式!如果还有其他问题,请随时向我提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-20 18:38:35 | 显示全部楼层
出现该错误是因为 pd.read_excel() 函数无法确定所读取的文件格式,需要手动指定引擎(engine)。在你的代码中,可以添加一个 engine 参数来解决这个问题。

修改后的代码如下:
import osimport pandas as pd# 指定文件夹路径folder_path = 'F:/code/out/'# 获取文件夹中所有的.xls文件files = [f for f in os.listdir(folder_path) if f.endswith('.xls')]# 遍历每个文件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[sheet_name] = df    # 构建新的文件名    new_file_name = os.path.splitext(file)[0] + '.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." 的问题。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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为对应的DataFramexls_dict = pd.read_excel(file_path, sheet_name=None, engine='xlrd')  # 如果你安装了xlrd<2.0
或者
# 读取.xls文件为字典,其中key为工作表名,value为对应的DataFramexls_dict = pd.read_excel(file_path, sheet_name=None, engine='pyxlsb')  # 如果你安装了pyxlsb
这样应该就可以解决你的问题了。如果仍然存在问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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文件:

i
mport os
import pandas as pd

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

# 获取文件夹中所有的.xls文件
files = [f for f in os.listdir(folder_path) if f.endswith('.xls')]

# 遍历每个文件
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[sheet_name] = df

    # 构建新的文件名
    new_file_name = os.path.splitext(file)[0] + '.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文件。

求最佳答案 ,谢谢啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 17:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表