python-3.x - Python 3.8 将 "open"视为导入的 openpyxl 方法而

我有一些代码需要打开有时是 .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')

这段代码应该:

  • 弹出对话框提示选择文件
  • 用 Python 打开该文件
  • 打印其文件名

在 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() 在这些情况下会在 3.8 中被调用(但在 3.7 中不会)?
  • 如何说服 Python 使用其内置的 open 函数?

最佳答案

我遇到了同样的问题并通过限制我的导入解决了它。因为我只使用了 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

unit-testing - 在 Racket 中使用模拟对象进行猴子修补

python - 计数没有。使用 dask 的大型 Parquet 文件中的行数没有内存错误