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 一个。基于此,我使用glob
和pandas
制定了如下代码:
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的主要内容,如果未能解决你的问题,请参考以下文章