我有一些代码需要打开有时是 .csv 文件但有时是 .xlsx 文件的文件。我已经导入了 openpyxl处理 Excel 文件。
从 Python 3.7 切换到 3.8 时,我发现使用 open 关键字(我打算引用 Python's built-in open function )会导致调用 openpyxl 的 load_workbook() 函数,这不是我想要的。
这是演示该问题的代码片段:
from openpyxl import *
from tkinter import *
import tkinter.filedialog
root = Tk()
root.withdraw()
fileName = tkinter.filedialog.askopenfilename(parent=root, title='Select file.')
with open(fileName, 'w', encoding='utf-8') as file:
print('fileName')
这段代码应该:
在 3.7 中,这正是它所做的;该脚本运行良好并打印出文件名。但是,当我在 3.8 中运行它时,我收到以下错误消息:
Traceback (most recent call last):
File "C:\Users\[username]\Documents\Python Scripts\test\test.py", line 10, in <module>
with open(fileName, 'w', encoding='utf-8') as file:
TypeError: load_workbook() got an unexpected keyword argument 'encoding'
load_workbook() 方法很疯狂,因为我向它传递了一个“编码”参数,这是它没有预料到的。如果我删除“编码”参数,则会收到以下错误:
Traceback (most recent call last):
File "C:\Users\[username]\Documents\Python Scripts\test\test.py", line 10, in <module>
with open(fileName, 'w') as file:
File "C:\Users\[username]\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\reader\excel.py", line 312, in load_workbook
reader = ExcelReader(filename, read_only, keep_vba,
File "C:\Users\[username]\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\reader\excel.py", line 124, in __init__
self.archive = _validate_archive(fn)
File "C:\Users\[username]\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\reader\excel.py", line 94, in _validate_archive
raise InvalidFileException(msg)
openpyxl.utils.exceptions.InvalidFileException: openpyxl does not support .csv file format, please check you can open it with Excel first. Supported formats are: .xlsx,.xlsm,.xltx,.xltm
现在很生气,因为我试图打开一个.csv文件,而openpyxl只能打开Excel文件。但我不明白为什么这里甚至涉及 openpyxl - 我所做的只是在顶部导入模块! open 关键字应该调用 Python 的内置函数,而不是来自 openpyxl 的方法。
问题:
最佳答案
我遇到了同样的问题并通过限制我的导入解决了它。因为我只使用了 load_workbook
函数,所以我将 from openpyxl import *
替换为 from openpyxl import load_workbook
。
关于python-3.x - Python 3.8 将 "open"视为导入的 openpyxl 方法而不是内置函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60961364/
相关文章:
emacs - 如何将ctags格式文件转换为etags格式文件?
javascript - mxgraph 避免边缘重叠节点或其他边缘
perl - 为什么我的 perl Catalyst redirect_and_detach 替换插
oracle - 无法使用 confluent CLI : java. sql.SQLExcepti
maven - Visual Studio Code 终端无法使用代理
java - 删除后 Netty SslHandler 握手超时
python - Flask App 进行多次登录尝试的奇怪行为
php - 实时服务器上的 Laravel Coinbase API Http 异常错误但适用于 X