現在のフォルダー内のすべての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'
Charles Duffyが私の元の質問でコメントしたように、実際の問題は、ファイルを読み書きするためのコード行がforループ内にあるようにインデントされていないことでした。インデントを修正することで問題が修正され、希望どおりに機能するようになりました。
常に簡単なことを確認するのに良いリマインダーです。インデントの欠如に気付かなかったように、なぜ機能しないのかわからなくなってしまいました。
私の場合、csvファイルをExcelで開いてスクリプトを実行しました。次に、このPermission denied例外が発生しました。
開いているファイルを閉じて、スクリプトを再度実行するだけです:)
私の場合、同じエラーは、ファイル名ではなくディレクトリ名を渡していたためです。
たぶん他人の同じ問題かもしれません。
スクリプト内のファイルがシステムのどこかで開かれています。これが、PermissionError:[エラー13]が発生する理由です。解決策:ファイルを閉じてスクリプトを実行するだけです。エラーは発生しません。