import os
import rarfile
file = input("Password List Directory: ")
rarFile = input("Rar File: ")
passwordList = open(os.path.dirname(file+'.txt'),"r")
使用此代码我收到错误:
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'
这很奇怪,因为我拥有这个文件的完全权限,因为我可以编辑它并做我想做的任何事情,而我只是想读它。我在stackoverflow上读到的每个其他问题都是关于写入文件并获得权限错误。
答案 0 :(得分:4)
您正在尝试打开目录,而不是文件,因为此行呼叫dirname
:
passwordList = open(os.path.dirname(file+'.txt'),"r")
要打开文件而不是包含它的目录,您需要以下内容:
passwordList = open(file + '.txt', 'r')
或者更好的是,使用with
构造来保证文件在完成后关闭。
with open(file + '.txt', 'r') as passwordList:
# Use passwordList here.
...
# passwordList has now been closed for you.
在Linux上,尝试打开目录会在Python 3.5中引发IsADirectoryError
,在Python 3.1中引发IOError
:
IsADirectoryError:[Errno 21]是一个目录:'/ home / kjc /'
我没有Windows框来测试它,但根据Daoctor's comment,当您尝试打开目录时,至少有一个版本的Windows会引发PermissionError
。
PS:我认为您应该信任用户输入整个目录和文件名称,而不是将'.txt'
附加到其上 - 或者您应该要求目录,然后为其附加一个默认文件名(如os.path.join(directory, 'passwords.txt')
)。
无论哪种方式,要求“目录”然后将其存储在名为file
的变量中都会让人感到困惑,所以选择其中一个。
答案 1 :(得分:2)
os.path.dirname()将返回文件所在的目录而不是文件路径。例如,如果file.txt在path ='C:/Users/Desktop/file.txt'中,则os.path.dirname(path)将返回'C:/ Users / Desktop'作为输出,而open()函数期待文件路径。 您可以将当前工作目录更改为文件位置并直接打开文件。
os.chdir(<File Directory>)
open(<filename>,'r')
或
open(os.path.join(<fileDirectory>,<fileName>),'r')