python pandas read_excel engine=openpyxl 没有关闭文件
python pandas read_excel engine=openpyxl not closing file
我正在使用以下方法将数据帧加载到 pandas:
import pandas as pd
df_factor_histories=pd.read_excel("./eco_factor/eco_factor_test_data_builder.xlsx",
engine='openpyxl', sheet_name=0)
engine=openpyxl
需要启用 read_excel
以支持更新的 Excel 文件格式(特别是在我的情况下 .xlsx
而不是 jusy .xls
)。
数据框加载得很好但文件保持打开状态:
import psutil
p = psutil.Process()
print(p.open_files())
OUTPUT
[popenfile(path='C:\Users\xx\.ipython\profile_default\history.sqlite', fd=-1),
popenfile(path='C:\Windows\System32\en-US\KernelBase.dll.mui', fd=-1),
popenfile(path='C:\Windows\System32\en-US\kernel32.dll.mui', fd=-1),
popenfile(path='D:\xxxxx\data modelling\eco_factor\eco_factor_test_data_builder.xlsx', fd=-1)]
这 Github Post 表明错误已修复 - 但对我来说不是 (运行 Anaconda/Jupyter)。
相关版本我是运行:
numpy 1.19.2
openpyxl 3.0.5
pandas 1.1.3
Python 3.7.4
我希望能就如何关闭 files/best 解决此问题提出一些建议,谢谢
我建议从您的代码中删除 engine='openpyxl'
。实际上并不需要。我在没有它的情况下使用 pd.read_excel
,即使对于 .xlsx
格式也能正常工作。
删除它会导致引擎参数的默认行为接管。引擎将知道使用哪个引擎:
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_excel.html#pandas.read_excel
engine : str, default None
If io is not a buffer or path, this must be set to identify io. Supported engines: “xlrd”, “openpyxl”, “odf”, “pyxlsb”. Engine compatibility :
“xlrd” supports old-style Excel files (.xls).
“openpyxl” supports newer Excel file formats.
“odf” supports OpenDocument file formats (.odf, .ods, .odt).
“pyxlsb” supports Binary Excel files.
Changed in version 1.2.0: The engine xlrd now only supports old-style .xls files. When engine=None, the following logic will be used to determine the engine:
If path_or_buffer is an OpenDocument format (.odf, .ods, .odt), then odf will be used.
Otherwise if path_or_buffer is an xls format, xlrd will be used.
Otherwise if openpyxl is installed, then openpyxl will be used.
Otherwise if xlrd >= 2.0 is installed, a ValueError will be raised.
Otherwise xlrd will be used and a FutureWarning will be raised. This case will raise a ValueError in a future version of pandas.
我遇到了同样的问题,
当我使用 pandas 和 engine=openpyxl
读取 excel 文件时。它没有被关闭。当我尝试使用 python 存档/移动 excel 文件时,出现错误,
PermissionError: [WinError 32] The process cannot access the file because it is being used by another process
此外,一旦它被 pandas 读取,我们就无法使用 Excel 工具对 excel 文件进行编辑或任何其他操作。
以下解决方案对我有用。
我正在使用:
python version 3.6.8.
pandas==0.25.1
openpyxl==3.0.7
import io
import pandas as pd
with open('path/to/input_excel_file.xlsx', "rb") as f:
file_io_obj = io.BytesIO(f.read())
df_input_file = pd.read_excel(file_io_obj, engine='openpyxl', sheet_name=None)
我正在使用以下方法将数据帧加载到 pandas:
import pandas as pd
df_factor_histories=pd.read_excel("./eco_factor/eco_factor_test_data_builder.xlsx",
engine='openpyxl', sheet_name=0)
engine=openpyxl
需要启用 read_excel
以支持更新的 Excel 文件格式(特别是在我的情况下 .xlsx
而不是 jusy .xls
)。
数据框加载得很好但文件保持打开状态:
import psutil
p = psutil.Process()
print(p.open_files())
OUTPUT
[popenfile(path='C:\Users\xx\.ipython\profile_default\history.sqlite', fd=-1),
popenfile(path='C:\Windows\System32\en-US\KernelBase.dll.mui', fd=-1),
popenfile(path='C:\Windows\System32\en-US\kernel32.dll.mui', fd=-1),
popenfile(path='D:\xxxxx\data modelling\eco_factor\eco_factor_test_data_builder.xlsx', fd=-1)]
这 Github Post 表明错误已修复 - 但对我来说不是 (运行 Anaconda/Jupyter)。 相关版本我是运行:
numpy 1.19.2
openpyxl 3.0.5
pandas 1.1.3
Python 3.7.4
我希望能就如何关闭 files/best 解决此问题提出一些建议,谢谢
我建议从您的代码中删除 engine='openpyxl'
。实际上并不需要。我在没有它的情况下使用 pd.read_excel
,即使对于 .xlsx
格式也能正常工作。
删除它会导致引擎参数的默认行为接管。引擎将知道使用哪个引擎: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_excel.html#pandas.read_excel
engine : str, default None
If io is not a buffer or path, this must be set to identify io. Supported engines: “xlrd”, “openpyxl”, “odf”, “pyxlsb”. Engine compatibility :
“xlrd” supports old-style Excel files (.xls).
“openpyxl” supports newer Excel file formats.
“odf” supports OpenDocument file formats (.odf, .ods, .odt).
“pyxlsb” supports Binary Excel files.
Changed in version 1.2.0: The engine xlrd now only supports old-style .xls files. When engine=None, the following logic will be used to determine the engine:
If path_or_buffer is an OpenDocument format (.odf, .ods, .odt), then odf will be used.
Otherwise if path_or_buffer is an xls format, xlrd will be used.
Otherwise if openpyxl is installed, then openpyxl will be used.
Otherwise if xlrd >= 2.0 is installed, a ValueError will be raised.
Otherwise xlrd will be used and a FutureWarning will be raised. This case will raise a ValueError in a future version of pandas.
我遇到了同样的问题,
当我使用 pandas 和 engine=openpyxl
读取 excel 文件时。它没有被关闭。当我尝试使用 python 存档/移动 excel 文件时,出现错误,
PermissionError: [WinError 32] The process cannot access the file because it is being used by another process
此外,一旦它被 pandas 读取,我们就无法使用 Excel 工具对 excel 文件进行编辑或任何其他操作。
以下解决方案对我有用。 我正在使用:
python version 3.6.8.
pandas==0.25.1
openpyxl==3.0.7
import io
import pandas as pd
with open('path/to/input_excel_file.xlsx', "rb") as f:
file_io_obj = io.BytesIO(f.read())
df_input_file = pd.read_excel(file_io_obj, engine='openpyxl', sheet_name=None)