Getting Python error -->PermissionError: [WinError 32] The process cannot access the file because it is being used by another process

Getting Python error -->PermissionError: [WinError 32] The process cannot access the file because it is being used by another process

我正在尝试使用 python 从本地路径读取一个 csv 文件,然后我将 csv 文件的记录处理成 json 结构,最后在控制台上打印它们。我已经在 try & except block.I 中编写了代码,我期望如果在从 csv 文件读取数据时 try 块中发生任何异常,except 块应该打印出异常已经发生并且它应该移动 csv 文件从当前位置到名为 errored 的文件夹。但是在通过模拟错误场景进行测试时,它无法在错误 folder.Instead 中移动 csv,它会抛出错误:-“PermissionError:[WinError 32] 该进程无法访问该文件,因为它正在被另一个进程使用” .下面是代码:-

try:
   global df
   df = pd.read_csv('CBD_BU_FULL.csv', encoding='UTF-8', dtype=str)
   df = df.assign(FILE_TYPE ='BU')
   data = df.to_json(orient = "records", lines=False).split('\n')
   print(data)

except:
   print("An exception occurred")    
   os.rename('CBD_BU_FULL.csv', '/Errored/CBD_BU_FULL.csv')

如果文件正在使用中,您将无法使用 os.rename。您可以改用 shutil.copy

很可能 pd.read_csv 没有正确关闭文件,因为它在读取过程中崩溃了,我会尝试自己打开文件,这样除了你自己的程序肯定会关闭文件,而且这个可能会解决您的问题。

import traceback
import pandas as pd
try:
   with open('CBD_BU_FULL.csv', "r") as f:
       df = pd.read_csv(f, encoding='UTF-8', dtype=str)
   df = df.assign(FILE_TYPE ='BU')
   data = df.to_json(orient = "records", lines=False).split('\n')
   print(data)

except:
   traceback.print_exc(1)
   os.rename('CBD_BU_FULL.csv', '/Errored/CBD_BU_FULL.csv')