Получение ошибки Python -> PermissionError: [WinError 32] Процесс не может получить доступ к файлу, потому что он используется другим процессом - PullRequest
0 голосов
/ 11 июля 2020

Я пытаюсь прочитать файл csv по локальному пути, используя python, а затем обрабатываю записи файла csv в структуру json, наконец, распечатываю их на консоли. Я написал код в блоке try & except. Я ожидаю, что если какое-либо исключение произойдет в блоке try при чтении данных из файла csv, блок except должен напечатать это исключение, и он должен переместить файл csv из текущего расположение в папке с ошибкой. Но при тестировании путем моделирования сценария с ошибками невозможно переместить 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')

Ответы [ 2 ]

0 голосов
/ 11 июля 2020

Вполне возможно, что 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')
0 голосов
/ 11 июля 2020

Вы не можете использовать os.rename, если файл уже используется. Вместо этого вы можете использовать shutil.copy.

...