2016-12-05 1 views
3

Je tente d'écrire un script python rapide pour parcourir tous les fichiers CSV du dossier actuel et supprimer la ligne d'en-tête d'entre eux, puis les stocker dans un dossier distinct.Python [Errno 13] Autorisation refusée:

Le répertoire de travail actuel contient quatre exemples de fichiers csv et le script python. Une fois exécuté, le script crée le répertoire HeaderRemoved.

Il semble qu'une fois le dossier créé, le code qui tente de lire les fichiers essaie d'accéder au dossier mais en regardant le code, je ne suis pas sûr de savoir pourquoi.

Je suis sur une machine Windows pour le moment.

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() 

Exemple de sortie:

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

Portez une attention particulière à l'indentation. Voyez comment votre 'csvFileObj = open (csvFile)' n'est pas dans votre 'for csvFile dans os.listdir ('.'):' Block? Cela signifie que vous ouvrez uniquement le fichier * last * que la boucle 'for' a pris en compte, que ce fichier ait ou non une extension' .csv'. –

+0

Ceci est un problème avec l'indentation: le dossier 'HeaderRemoved' est probablement le dernier fichier retourné par' os.listdir' et vous essayez d'ouvrir et de supprimer l'en-tête _only_, qui ne peut pas être ouvert en tant que fichier CSV (il est un dossier). Par conséquent, l'erreur «Permission Denied». –

Répondre

2

Comme Charles Duffy a commenté sous ma question initiale, la question était en fait que les lignes de code pour la lecture et l'écriture des fichiers n'avaient pas été en retrait de tomber dans le pour la boucle. La correction de l'indentation a corrigé le problème et fonctionne désormais comme souhaité.

Un bon rappel pour toujours vérifier les choses simples .... Je me suis tellement emballé dans pourquoi il ne fonctionnait pas que je n'ai même pas remarqué le manque d'indentation.