2016-08-02 5 views
1
import os 
import rarfile 

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

passwordList = open(os.path.dirname(file+'.txt'),"r") 

с этим кодом я получаю сообщение об ошибке:Python Разрешение Ошибка при чтении

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

Право, это дает мне «» Разрешение отказано»ошибка при попытке открыть каталог – Daoctor

ответ

2

Вы пытаетесь открыть каталог, а не файл, из-за вызова 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, и IOError в Python 3.1:

IsADirectoryError: [Errno 21] Is a directory: '/home/kjc/'

Я не имею коробку Windows, чтобы проверить это, но в соответствии с Daoctor's comment, по крайней мере, одна версия Windows поднимает PermissionError при попытке открыть каталог.

PS: Я думаю, вы должны либо доверять пользователю ввести полное имя каталога и его самого --- без добавления к нему '.txt' --- или вы должны попросить только каталог, а затем добавьте к нему имя файла по умолчанию (например, os.path.join(directory, 'passwords.txt')).

В любом случае, запрашивая «каталог», а затем сохраняя его в переменной с именем file, будет сложно ввести в заблуждение, поэтому выберите тот или иной.

+1

Ошибка Windows API, является' ERROR_ACCESS_DENIED' при попытке открыть каталог в виде обычный файл (в отличие от каталога). Это не особенно полезная ошибка, особенно учитывая, что исходная ошибка, поступающая из ядра NT, гораздо более полезна «STATUS_FILE_IS_A_DIRECTORY». К сожалению, API Windows с древних времен и, вероятно, пытался остаются совместимыми с Win16, работающими на MS-DOS. – eryksun

+0

@eryksun Спасибо за фоновый ... Я был выиграл почему сообщение об ошибке было настолько ошибочным. –

1

os.path.dirname() вернет каталог, в котором присутствует файл, а не путь к файлу. Например, если file.txt находится в пути = 'C: /Users/Desktop/file.txt', то os.path.dirname (path) wil возвращает 'C:/Users/Desktop' в качестве вывода, а функция open() ожидает путь к файлу. Вы можете изменить текущий рабочий каталог на местоположение файла и открыть файл напрямую.

os.chdir(<File Directory>) 
open(<filename>,'r') 

или

open(os.path.join(<fileDirectory>,<fileName>),'r')