读取时出现Python权限错误

读取时出现Python权限错误,python,windows,python-3.x,permissions,file-permissions,Python,Windows,Python 3.x,Permissions,File Permissions,使用此代码,我得到了错误: import os import rarfile file = input("Password List Directory: ") rarFile = input("Rar File: ") passwordList = open(os.path.dirname(file+'.txt'),"r") 回溯(最近一次呼叫最后一次): 文件“C:\Users\Nick L\Desktop\Programming\PythonProgramming\rarcacker

使用此代码,我得到了错误:

import os
import rarfile

file = input("Password List Directory: ")
rarFile = input("Rar File: ")

passwordList = open(os.path.dirname(file+'.txt'),"r")
回溯(最近一次呼叫最后一次):
文件“C:\Users\Nick L\Desktop\Programming\PythonProgramming\rarcacker.py”,第7行,在
passwordList=open(os.path.dirname(file+'.txt'),“r”)
PermissionError:[Errno 13]权限被拒绝:“C:\\Users\\Nick L\\Desktop”
这很奇怪,因为我对这个文件有完全的权限,因为我可以编辑它,做任何我想做的事情,而我只是试图阅读它。我在stackoverflow上读到的所有其他问题都与写入文件和获取权限错误有关。

您试图打开的是目录,而不是文件,因为此行调用了
dirname

passwordList=open(os.path.dirname(file+'.txt'),“r”)
要打开该文件而不是包含该文件的目录,您需要如下内容:

passwordList=open(文件+'.txt',r')
或者更好的方法是,使用带有结构的
,以确保文件在处理完毕后关闭

打开(file+'.txt',r')作为密码列表:
#在这里使用密码列表。
...
#密码列表现在已为您关闭。
在Linux上,尝试打开目录会在Python 3.5中引发
IsADirectoryError
,在Python 3.1中引发
IOError

IsADirectoryError:[Errno 21]是一个目录:'/home/kjc/'

我没有一个Windows框来测试这一点,但根据,当您尝试打开目录时,至少有一个版本的Windows会引发
PermissionError

PS:我认为您应该信任用户输入整个目录并给他(或她自己)命名,而无需向其添加
'.txt'
,或者您应该只请求目录,然后向其添加默认文件名(如
os.path.join(目录,'passwords.txt')

无论哪种方式,请求一个“目录”,然后将其存储在名为
file
的变量中肯定会令人困惑,因此选择一个或另一个。

Traceback (most recent call last):
  File "C:\Users\Nick     L\Desktop\Programming\PythonProgramming\RarCracker.py", line 7, in <module>
    passwordList = open(os.path.dirname(file+'.txt'),"r")
PermissionError: [Errno 13] Permission denied: 'C:\\Users\\Nick L\\Desktop'
os.chdir()
开放(,'r')

open(os.path.join(,),'r')

对,当我尝试打开目录时,它会给我“权限被拒绝”错误Windows API错误是
error\u ACCESS\u denied
当您尝试将目录作为常规文件(而不是目录)打开时。这并不是一个特别有用的错误,特别是考虑到源代码错误来自NT内核,是更有用的
状态文件\u是\u a\u目录
。不幸的是,Windows API来自远古时代,可能试图与在MS-DOS上运行的Win16保持兼容。@eryksun感谢您的背景…我赢了为什么错误消息会如此误导。
os.chdir(<File Directory>)
open(<filename>,'r')
open(os.path.join(<fileDirectory>,<fileName>),'r')