【问题标题】:python pd.read_excel [WinError 32] The process cannot access the file because it is being used by another processpython pd.read_excel [WinError 32] 该进程无法访问该文件,因为它正在被另一个进程使用
【发布时间】:2021-01-28 15:06:28
【问题描述】:

我正在努力解决以下问题:

我每天收到一个 .xls 文件。但是,该文件的格式与扩展名不同。有时是 .xlsx,有时是 .xlsb。我正在尝试将此文件的内容读入熊猫数据框中,因此我编写了以下代码:

import openpyxl
import pyxlsb 
import pyodbc
import os
import pandas as pd

try:
    full_name1 = "my_file.xls"
    full_name2 = "my_file.xlsx"
    os.rename(full_name1, full_name2)
    df = pd.read_excel(full_name2, sheet_name = 'Sheet 2', engine = 'openpyxl', skiprows = range(0, 7), usecols = "A:X")

except:
    
    full_name1 = "my_file.xlsx"
    full_name2 = "my_file.xlsb"
    os.rename(full_name1, full_name2)
    df = pd.read_excel(full_name2, sheet_name = 'Sheet 2', engine = 'pyxlsb', skiprows = range(0, 7), usecols = "A:X")    

但是,我得到了错误:

[WinError 32] 进程无法访问该文件,因为它正被另一个进程使用:'my_file.xlsx' -> 'my_file.xlsb'

“my_file.xlsx”似乎仍在使用中。

有没有办法解决这个问题?

【问题讨论】:

  • 您真的需要重命名文件吗?为什么不将pd.read_excel 与不同的引擎一起使用?如果第一个不起作用,请使用第二个。
  • 不幸的是,我确实需要重命名。由于 excel 文件的格式(51 - 这是 .xlsx 或 50 - for.xlsb 的格式)和扩展名(.xls)不一致,python 对 xlrd 和 openpyxl/pyxlsb 都抛出错误。

标签: python pandas dataframe error-handling try-except


【解决方案1】:

为什么不浏览目录中的文件列表?:

import os
for directory, subdirlist, filelist in os.walk('C:\\Google Drive\\Python\\Uhlmann\\'):
    for file in filelist:
        df = pd.read_excel(file, sheet_name = 'Sheet 2', engine = 'openpyxl', skiprows = range(0, 7), usecols = "A:X")

【讨论】:

    【解决方案2】:

    我最终找到了一个解决方案 - 它增加了程序的运行时间,但它确实有效:

    import openpyxl
    import pyxlsb 
    import pyodbc
    import os
    import pandas as pd
    import shutil
    
    full_name1 = "my_file.xls"
    full_name2 = "my_file.xlsx"
    full_name3 = "my_file.xlsb"
    
    shutil.copy(full_name1, full_name3)
    os.rename(full_name1, full_name2)
    
    try:
        df = pd.read_excel(full_name2, sheet_name = 'Sheet 2', engine = 'openpyxl', skiprows = range(0, 7), usecols = "A:X")
    
    except:
        df = pd.read_excel(full_name3, sheet_name = 'Sheet 2', engine = 'pyxlsb', skiprows = range(0, 7), usecols = "A:X")    
    

    【讨论】:

      猜你喜欢
      • 2018-10-28
      • 2019-11-26
      • 2021-09-28
      • 2015-11-13
      • 2015-01-28
      • 2017-06-02
      • 2021-09-21
      • 1970-01-01
      • 2020-10-31
      相关资源
      最近更新 更多