我有一些代码,其中我需要打开的文件有时是.csv文件,但有时是.xlsx文件。 我已经导入了 openpyxl 来处理Excel文件。
从 Python 3.7 转换到 3.8 时,我发现使用 开 关键字 Python的内置 开 功能)的结果是调用openpyxl的 装入工作簿() 函数,这不是我想要的。
这里有一段代码可以证明这个问题。
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'
The 装入工作簿() 方法是疯狂的,因为我给它传递了一个它没有想到的'编码'参数。 如果我删除 "编码 "参数,我得到以下错误。
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在这里会被牵扯进来--我所做的一切只是在顶部导入模块而已。 我所做的只是在顶部导入模块 开 关键字应该是调用Python的内置函数,而不是openpyxl的方法。
问题。
我遇到了同样的问题,并通过限制导入来解决。因为我只使用了 load_workbook
函数,我把 from openpyxl import *
与 from openpyxl import load_workbook
.