Pandas 和 glob:将文件夹中的所有 xlsx 文件转换为 csv – TypeError: __init__() got an unexpected keyword argument 'xf

Posted

技术标签:

【中文标题】Pandas 和 glob:将文件夹中的所有 xlsx 文件转换为 csv – TypeError: __init__() got an unexpected keyword argument \'xfid\'【英文标题】:Pandas and glob: convert all xlsx files in folder to csv – TypeError: __init__() got an unexpected keyword argument 'xfid'Pandas 和 glob:将文件夹中的所有 xlsx 文件转换为 csv – TypeError: __init__() got an unexpected keyword argument 'xfid' 【发布时间】:2021-09-26 09:27:27 【问题描述】:

我有一个包含许多 xlsx 文件的文件夹,我想将它们转换为 csv 文件。

在我的研究过程中,如果发现了几个关于这个主题的线程,例如this 或that 一个。基于此,我使用globpandas制定了如下代码:

import glob
import pandas as pd

path = r'/Users/.../xlsx files'
excel_files = glob.glob(path + '/*.xlsx')

for excel in excel_files:
    out = excel.split('.')[0]+'.csv'
    df = pd.read_excel(excel)         # error occurs here 
    df.to_csv(out)

但不幸的是,我收到以下错误消息,在这种情况下我无法解释,我无法弄清楚如何解决这个问题:

Traceback (most recent call last):
  File "<input>", line 11, in <module>
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/util/_decorators.py", line 299, in wrapper
    return func(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/io/excel/_base.py", line 336, in read_excel
    io = ExcelFile(io, storage_options=storage_options, engine=engine)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/io/excel/_base.py", line 1131, in __init__
    self._reader = self._engines[engine](self._io, storage_options=storage_options)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/io/excel/_openpyxl.py", line 475, in __init__
    super().__init__(filepath_or_buffer, storage_options=storage_options)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/io/excel/_base.py", line 391, in __init__
    self.book = self.load_workbook(self.handles.handle)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/io/excel/_openpyxl.py", line 486, in load_workbook
    return load_workbook(
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/openpyxl/reader/excel.py", line 317, in load_workbook
    reader.read()
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/openpyxl/reader/excel.py", line 281, in read
    apply_stylesheet(self.archive, self.wb)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/openpyxl/styles/stylesheet.py", line 198, in apply_stylesheet
    stylesheet = Stylesheet.from_tree(node)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/openpyxl/styles/stylesheet.py", line 103, in from_tree
    return super(Stylesheet, cls).from_tree(node)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/openpyxl/descriptors/serialisable.py", line 87, in from_tree
    obj = desc.expected_type.from_tree(el)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/openpyxl/descriptors/serialisable.py", line 87, in from_tree
    obj = desc.expected_type.from_tree(el)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/openpyxl/descriptors/serialisable.py", line 103, in from_tree
    return cls(**attrib)
TypeError: __init__() got an unexpected keyword argument 'xfid'

有谁知道如何解决这个问题?非常感谢您的帮助!

【问题讨论】:

您的所有 Excel 文件都失败了吗?在执行读取调用之前尝试添加 print(excel) 以查看它在哪个文件上失败。您还可以添加异常处理以跳过失败的文件。 您是否在安装了 Excel 的 Windows 上运行?如果是这样,可能有另一种方法 似乎在所有excel文件上都失败了:文件是连续编号的。我按照你的建议添加了print(excel),它随机给了我其中一个数字。将此文件移动到另一个文件夹后,它在另一个随机文件上失败。我在> 25个文件上试过这个。不,我在安装了 Excel 的 MacOS 上运行。你对如何处理这个问题有什么建议吗? 您可以尝试直接使用openpyxl.load_workbook() 函数(不使用Pandas)并传递data_only=True。可能不会有帮助,但值得一试。如果您使用的是 Windows,您可以直接自动化 Excel 以加载并保存为 CSV 格式,这在 Mac 上可能是可行的,但我没有尝试过。 【参考方案1】:

我在这里遇到了同样的问题。经过几个小时的思考和搜索,我意识到问题实际上是文件。我使用 MS Excel 打开它,然后保存。阿拉卡山,问题解决了。

文件已下载,所以我认为这是一个“安全”错误,或者只是文件创建方式的错误。 xD

编辑: 这不是安全问题,实际上是文件生成错误。正确的有两倍的 kb 是错误的文件。 一个解决方案是:如果使用xlrd==1.2.0可以打开文件,则可以在执行此操作后调用read_excel到Book(由xlrd打开的文件)。

import xlrd

# df = pd.read_excel('TabelaPrecos.xlsx')
# The line above is the same result

a = xlrd.open_workbook('TabelaPrecos.xlsx')
b = pd.read_excel(a)

【讨论】:

作者的文件是 Kendo UI。如果你有同样的错误,

以上是关于Pandas 和 glob:将文件夹中的所有 xlsx 文件转换为 csv – TypeError: __init__() got an unexpected keyword argument 'xf的主要内容,如果未能解决你的问题,请参考以下文章

分块读取 Pandas 中的多个 CSV 文件

Pandas 将文件名存储在列表中,并将所有文件读入数据框

附加在 for 循环中生成的 pandas 数据帧

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

熊猫中的文件路径错误

将单个组中的 pandas 数据帧迭代地附加到 h5 文件