Python [Errno 13] Отказано в доступе:

Я пытаюсь написать быстрый скрипт Python для перебора всех файлов csv в текущей папке и удаления из них строки заголовка, а затем сохранения их в отдельной папке.

Текущий рабочий каталог содержит четыре примера CSV-файлов и скрипт Python. После выполнения скрипт создает каталог HeaderRemoved.

Похоже, что после создания папки код, который пытается прочитать файлы, пытается получить доступ к папке, но, глядя на код, я не уверен, почему это должно быть.

В данный момент я на машине с Windows.

import csv, os, argparse, string
from ctypes import *

os.makedirs('HeaderRemoved', exist_ok=True)

# Loop through files in the current working directory
for csvFile in os.listdir('.'):
    if not csvFile.endswith('.csv'):
        continue                            # Skips non-csv files
    print ('Removing header from ' + csvFile + '...')

# Read in CSV skipping the first row
csvRows = []
csvFileObj = open(csvFile)
csvReader = csv.reader(csvFileObj)

for row in csvReader:
    if csvReader.line_num == 1:
        continue                            # Skips the first row
    csvRows.append(row)
csvFileObj.close()

# Write out the CSV file
csvFileObj = open (os.path.join('HeaderRemoved', csvFile), 'w', newline='')
for row in csvRows:
    csvWriter.writerow(row)

csvFileObj.close()

Пример вывода:

Removing header from examplefile_1.csv... 
Removing header from examplefile_2.csv... 
Removing header from examplefile_3.csv... 
Removing header from examplefile_4.csv... 
Traceback (most recent call last):   File "atbs_csv_parse.py", line 14, in <module>
    csvFileObj = open(csvFile) PermissionError: [Errno 13] Permission denied: 'HeaderRemoved'

person digital_alchemy    schedule 05.12.2016    source источник
comment
Обратите особое внимание на углубление. Видишь, твой csvFileObj = open(csvFile) не находится внутри твоего блока for csvFile in os.listdir('.'):? Это означает, что вы открываете только последний файл, рассмотренный циклом for, независимо от того, имел ли этот файл расширение .csv или нет.   -  person Charles Duffy    schedule 06.12.2016
comment
Это проблема с отступом: папка HeaderRemoved, вероятно, является последним файлом, возвращенным os.listdir, и вы пытаетесь открыть и удалить из нее заголовок только, который нельзя открыть как файл CSV (это это папка). Отсюда и ошибка Permission Denied.   -  person musically_ut    schedule 06.12.2016


Ответы (5)


В моем случае я открыл файл csv через Excel и запустил скрипт. Затем произошло это исключение отказа в разрешении.

Просто закрыл открытый файл и снова запустил скрипт :)

person Chanaka Fernando    schedule 25.09.2018

В моем случае та же ошибка была из-за того, что я передавал имя каталога вместо имени файла.

Возможно, такая же проблема и у других.

person Randolfo    schedule 26.03.2018

Как Чарльз Даффи прокомментировал мой первоначальный вопрос, проблема заключалась в том, что строки кода для чтения и записи файлов не имели отступа, чтобы попасть в цикл for. Исправление отступа устранило проблему, и теперь она работает так, как хотелось бы.

Хорошее напоминание всегда проверять простые вещи... Я так увлекся тем, почему это не работает, что даже не заметил отсутствия отступов.

person digital_alchemy    schedule 05.12.2016

Файл в скрипте открывается где-то в системе. Это причина получения PermissionError : [Ошибка 13].

Решение:
Просто закройте файл и запустите скрипт. Вы не получите ошибку.

person Ashwani Kumar    schedule 12.08.2019

Если вы столкнулись с проблемой, когда вы можете использовать CSV-файл с жестко закодированным путем, но не можете использовать его с каталогом Windows или путем к файлу, поскольку панды или другая библиотека не имеют разрешения на прямое использование этого объекта, поэтому у вас есть преобразовать его в перемешивание и использовать. Я столкнулся с этой проблемой, и это решение сработало для меня.

from pathlib import Path
cur_dir=Path.cwd()
#cwd = os.getcwd()
csv_path=str(cur_dir)+"\\..\\Dataset\\FuelConsumptionCo2.csv"
df = pd.read_csv(csv_path)
person Mohit Patidar    schedule 26.07.2020