鱼C论坛

 找回密码
 立即注册
查看: 1973|回复: 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.
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-7-20 18:38:27 | 显示全部楼层
本帖最后由 陶远航 于 2023-7-20 21:02 编辑

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

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

  1. xls_dict = pd.read_excel(file_path, sheet_name=None, engine='openpyxl')
复制代码


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

祝你成功转换文件格式!如果还有其他问题,请随时向我提问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

修改后的代码如下:
  1. import os
  2. import pandas as pd
  3. # 指定文件夹路径
  4. folder_path = 'F:/code/out/'
  5. # 获取文件夹中所有的.xls文件
  6. files = [f for f in os.listdir(folder_path) if f.endswith('.xls')]
  7. # 遍历每个文件
  8. for file in files:
  9.     # 构建文件的完整路径
  10.     file_path = os.path.join(folder_path, file)
  11.     # 读取.xls文件为字典,其中key为工作表名,value为对应的DataFrame
  12.     xls_dict = pd.read_excel(file_path, sheet_name=None, engine='openpyxl')
  13.     # 遍历每个工作表
  14.     for sheet_name, df in xls_dict.items():
  15.         # 去掉第一列
  16.         df = df.iloc[:, 1:]
  17.         # 将修改后的DataFrame保存到字典中
  18.         xls_dict[sheet_name] = df
  19.     # 构建新的文件名
  20.     new_file_name = os.path.splitext(file)[0] + '.xlsx'
  21.     # 保存为.xlsx文件
  22.     new_file_path = os.path.join(folder_path, new_file_name)
  23.     with pd.ExcelWriter(new_file_path, engine='openpyxl') as writer:
  24.         for sheet_name, df in xls_dict.items():
  25.             df.to_excel(writer, sheet_name=sheet_name, index=False)
  26.     # 删除旧的.xls文件
  27.     os.remove(file_path)
  28. print("转换完成!")
复制代码

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

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

球一个最佳答案谢谢啦!这对我非常重要!
小甲鱼最新课程 -> https://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 。下面是如何进行安装的代码:
  1. pip install 'xlrd==1.2.0'
复制代码
或者
  1. pip install pyxlsb
复制代码

然后,在你的代码中指定这个引擎:
  1. # 读取.xls文件为字典,其中key为工作表名,value为对应的DataFrame
  2. xls_dict = pd.read_excel(file_path, sheet_name=None, engine='xlrd')  # 如果你安装了xlrd<2.0
复制代码
或者
  1. # 读取.xls文件为字典,其中key为工作表名,value为对应的DataFrame
  2. xls_dict = pd.read_excel(file_path, sheet_name=None, engine='pyxlsb')  # 如果你安装了pyxlsb
复制代码
这样应该就可以解决你的问题了。如果仍然存在问题,请随时提问。
小甲鱼最新课程 -> https://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'
小甲鱼最新课程 -> https://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
  1. mport os
  2. import pandas as pd

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

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

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

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

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

  18. &#160; &#160;&#160; &#160;&#160;&#160;# 将修改后的DataFrame保存到字典中
  19. &#160; &#160;&#160; &#160;&#160;&#160;xls_dict[sheet_name] = df

  20. &#160; &#160; # 构建新的文件名
  21. &#160; &#160; new_file_name = os.path.splitext(file)[0] + '.xlsx'

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

  27. &#160; &#160; # 删除旧的.xls文件
  28. &#160; &#160; os.remove(file_path)

  29. print("转换完成!")
复制代码


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

  1. pip install xlrd
复制代码


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

求最佳答案 ,谢谢啦
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-22 05:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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