Python 3.8将 "open "作为导入的openpyxl方法,而不是内置的函数。

问题描述 投票:0回答:1

我有一些代码,其中我需要打开的文件有时是.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')

这段代码应该是:

  • 弹出一个对话框,提示你选择一个文件。
  • 用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'

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的方法。


问题。

  • 为什么 装入工作簿() 在这些情况下在 3.8 中被调用 (但在 3.7 中没有)?
  • 如何说服Python使用它内置的 函数来代替?
python-3.x openpyxl python-3.8
1个回答
0
投票

我遇到了同样的问题,并通过限制导入来解决。因为我只使用了 load_workbook 函数,我把 from openpyxl import *from openpyxl import load_workbook.

© www.soinside.com 2019 - 2024. All rights reserved.