阅读时Python权限错误

时间:2016-08-02 04:03:13

标签: 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")

使用此代码我收到错误:

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上读到的每个其他问题都是关于写入文件并获得权限错误。

2 个答案:

答案 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')