Python [Errno 13] 权限被拒绝:
Posted
技术标签:
【中文标题】Python [Errno 13] 权限被拒绝:【英文标题】:Python [Errno 13] Permission denied: 【发布时间】:2017-04-20 11:14:02 【问题描述】:我正在尝试编写一个快速的 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'
【问题讨论】:
密切注意缩进。看看你的csvFileObj = open(csvFile)
怎么不在你的for csvFile in os.listdir('.'):
块内?这意味着您只打开 for
循环考虑的 last 文件,无论该文件是否具有 .csv
扩展名。
这是缩进的问题:文件夹HeaderRemoved
可能是os.listdir
返回的最后一个文件,您正试图打开并删除标题 only它,不能作为 CSV 文件打开(它是一个文件夹)。因此,Permission Denied
错误。
【参考方案1】:
就我而言,我通过 Excel 打开了 csv 文件并运行了脚本。然后发生了这个 Permission denied 异常。
刚刚关闭打开的文件并再次运行脚本:)
【讨论】:
【参考方案2】:在我的例子中,同样的错误是因为我传递的是目录名而不是文件名。
也许其他人也有同样的问题。
【讨论】:
【参考方案3】:正如 Charles Duffy 在我最初的问题下评论的那样,问题实际上是用于读取和写入文件的代码行没有缩进到 for 循环中。更正缩进解决了这个问题,它现在可以正常工作了。
一个很好的提醒,要始终检查简单的事情....我太专注于为什么它不起作用,以至于我什至没有注意到缺少缩进。
【讨论】:
【参考方案4】:脚本中的文件在系统某处打开。这就是得到“PermissionError : [Error 13]”的原因。
解决方案: 只需关闭文件并运行脚本。你不会得到错误。
【讨论】:
【参考方案5】:如果您遇到可以使用硬编码路径的 csv 文件但不能与 windows 目录或文件路径一起使用的问题,因为 pandas 或其他库没有直接使用该对象的权限,所以你必须将其转换为搅拌和使用。我遇到了这个问题,这个解决方案对我有用。
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)
【讨论】:
以上是关于Python [Errno 13] 权限被拒绝:的主要内容,如果未能解决你的问题,请参考以下文章
PermissionError: [Errno 13] 权限被拒绝
使用 PowerShell 调用服务器以运行 python 脚本:无法打开文件 [Errno 13] 权限被拒绝
Django OSError:[Errno 13] 权限被拒绝
ValueError:无法配置处理程序“文件”:[Errno 13] 权限被拒绝: