web-dev-qa-db-ja.com

Python [Errno 13]権限が拒否されました:

現在のフォルダー内のすべてのcsvファイルを反復処理し、それらからヘッダー行を削除して別のフォルダーに格納するための簡単なpythonスクリプトを記述しようとしています。

現在の作業ディレクトリには、4つのサンプル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'
6
digital_alchemy

Charles Duffyが私の元の質問でコメントしたように、実際の問題は、ファイルを読み書きするためのコード行がforループ内にあるようにインデントされていないことでした。インデントを修正することで問題が修正され、希望どおりに機能するようになりました。

常に簡単なことを確認するのに良いリマインダーです。インデントの欠如に気付かなかったように、なぜ機能しないのかわからなくなってしまいました。

3
digital_alchemy

私の場合、csvファイルをExcelで開いてスクリプトを実行しました。次に、このPermission denied例外が発生しました。

開いているファイルを閉じて、スクリプトを再度実行するだけです:)

8

私の場合、同じエラーは、ファイル名ではなくディレクトリ名を渡していたためです。

たぶん他人の同じ問題かもしれません。

1
Randolfo

スクリプト内のファイルがシステムのどこかで開かれています。これが、PermissionError:[エラー13]が発生する理由です。解決策:ファイルを閉じてスクリプトを実行するだけです。エラーは発生しません。

0
Ashwani Kumar