当前位置: 首页 > 知识库问答 >
问题:

Python3.8将“open”视为导入的openpyxl方法,而不是内置函数

艾焱
2023-03-14

我有一些代码,需要在其中打开文件,这些文件有时会被删除。csv文件,但其他时间。xlsx文件。我已经导入openpyxl来处理Excel文件。

在从Python 3.7切换到3.8时,我发现使用open关键字(我打算引用Python内置的open函数)会导致调用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的方法。

问题:

  • 为什么在3.8(而不是3.7)中的这些情况下会调用load_workbook()
  • 我如何说服Python使用其内置的开放函数呢

共有3个答案

慕河
2023-03-14
匿名用户

openpyxl。open是openpyxl的别名。加载3.0版中添加的工作簿。您已经从openpyxl导入*导入了该别名。(您的Python 3.7安装程序可能使用了旧的openpyxl版本。)

停止使用导入*!这是使用import*时出错的教科书示例。使用import openpyxl并使用openpyxl显式访问内容。不管怎样

燕禄
2023-03-14

使用io。打开。您必须在脚本顶部导入io。

姜嘉赐
2023-03-14

我也有同样的问题,并通过限制我的进口来解决它。因为我只使用了load_workbook函数,所以我用openpyxl导入的替换了openpyxl导入的load_workbook

 类似资料:
  • 我正在使用openpyxl导入/导出xlsx文件。 但是我不能导入我用openpyxl导出的文件。 我必须在Excel中打开导出的xlsx文件,更改导入的xlsx文件的一些值并保存它(它的大小也会改变(例如:从148 Ko到180 Ko)。然后我可以用openpyxl导入它。 我认为,有一个问题,在出口,因为后保存手动导入作品。 谢谢

  • 问题内容: 在我的pl / sql脚本中,当通过[:upper:]字符类语法搜索时,Oracle将字母’e’视为大写。 IE 相关的Oracle文档可以在这里找到: Oracle- 多语言正则表达式语法 甲骨文- REGEXP_LIKE 问题答案: 当您将字符类用方括号括起来时,这些字符类似乎可以工作: 当您使用单括号时,Oracle将它们视为字符列表,即,由于字符串中包含以下内容,因此可以进行以

  • 问题内容: 我不明白为什么很少有导入包在“ java”后面附加“ x”。是什么原因?难道就和其他人一样吗? 问题答案: Swing最初是Java的扩展-可单独下载的库。它成为Java 1.2中“主要” JRE的一部分。一个单独的库声称拥有java。*包,这很奇怪,因此是目前的情况。还有许多其他扩展都有类似的故事。 在Swing的维基百科的文章有其历史提供更多的信息。

  • 我正在构建一个快速API服务器,代表我的客户提供代码。 所以我的目录结构是: 在中我有: 在中我有: 我不知道我的客户的代码(在中)会是什么类型。但我想使用FastAPI内置的OpenAPI模式生成(而不是要求我的客户接受和解析JSON输入)。 有没有办法将要的参数类型设置为与 的参数类型相同? 似乎有一种方法是用花哨的字符串插值来执行,但我担心这不是真正的Pythonic,我还必须清理用户的输入

  • 问题内容: 以及你使用哪种替代策略来避免LazyLoadExceptions? 我确实了解到公开会议存在以下问题: 在不同的jvm中运行的分层应用程序 事务仅在最后提交,最有可能你希望在结果之前提交。 但是,如果你知道你的应用程序在单个vm上运行,为什么不通过使用开放会话视图策略来减轻痛苦呢? 问题答案: 因为从性能和理解的角度来看,在视图层中发送可能未初始化的代理(尤其是集合)并从那里触发hib

  • 问题内容: Python说明文件:https : //docs.python.org/2/library/functions.html#open 上面的文档说:“可选的缓冲参数指定文件所需的缓冲区大小:0表示未缓冲,1表示行缓冲,任何其他正值表示使用(大约)该大小(以字节为单位)的缓冲区。负缓冲表示使用系统默认值。如果省略,则使用系统默认值。”。 当我使用 要么 要么 要么 要么 输出没有变化。上