2016-12-05 12 views
3

Я пытаюсь написать быстрый скрипт python для итерации всех файлов csv в текущей папке и удаления из них строки заголовка, а затем сохранить их в отдельной папке.Python [Errno 13] Permission denied:

В текущем рабочем каталоге есть четыре примера csv-файлов и сценарий python. После выполнения сценария создается каталог HeaderRemoved.

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

Я нахожусь на машине для окон в данный момент. Выход

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' 
+4

Обратите особое внимание на отступы. Посмотрите, как ваш 'csvFileObj = open (csvFile)' не находится внутри вашего 'для csvFile в os.listdir ('.'):' Block? Это означает, что вы открываете только * последний * файл, который рассматривался в цикле 'for', независимо от того, имел ли этот файл расширение« .csv »или не было. –

+0

Это проблема с отступом: папка 'HeaderRemoved', вероятно, является последним файлом, возвращаемым' os.listdir', и вы пытаетесь открыть и удалить из него заголовок _only_, который не может быть открыт как CSV-файл (он это папка). Следовательно, ошибка «Разрешение отказа». –

ответ

2

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

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