В доступе к файлам в запросе Anaconda отказано в разрешении - PullRequest
0 голосов
/ 03 июля 2018

У меня есть сценарий Python, который обращается к некоторым файлам, например, из одной строки кода добавляет текст в файл .txt. Он работает правильно в обычном cmd.exe, с доступом к Admnistrator или без него. Но при использовании Anaconda Prompt или cmd.exe, открытого из Anaconda Navigator, он выдает PermissionError: [Errno 13] Permission denied: в строке open('path/to/file', 'a+').

Я ищу решение, почему питон Анаконды не может получить доступ к файлам. Другая строка кода, использующая функцию handlers.TimedRotatingFileHandler() из модуля ведения журнала, также выдает ту же ошибку.

Некоторая информация, которая может быть полезна:

  • У меня есть две среды Anaconda, одна с python 2.7 и другая с python 3.6.6, обе выдают ошибку;
  • Я установил Anaconda 3 без добавления anaconda в PATH, потому что это было рекомендовано в установщике;
  • Питон моего PATH, версия, которая работает в non-anaconda cmd.exe, также 3.6.6;
  • Я использую Windows 10.

Edit:

Ладно, похоже, есть некоторая путаница в том, чего я пытаюсь достичь. Я делаю текстовый файл с каждым файлом .jpg в папке рекурсивно с последующим разделением имени файла. Текстовый файл должен иметь: "путь / к / файлу XY_file_XY.jpg" для каждого найденного файла. Эти сплиты представляют метки изображений для нейронной сети, которую я тренирую.

Вот мой код для создания этого текстового файла:

import glob

class DBSetter(object):
    def __init__(self, rootPath = 'C:\\Users\\Victor.Lundgren\\Google Drive\\Mestrado\\VC\\Projeto\\data\\mnt'):
        self.path = rootPath
        return

    def setDB(self, extension = '.jpg', splitFileName = True, splitDilimiter = '_', splitPosition = 1):
        query = self.path+'\\**\\*'+extension
        print(query)
        fileList = glob.glob(query, recursive = True)
        sampleFileText = ''
        for file in fileList:
            word = file.split('\\')[-1]
            if splitFileName:
                word = word.split(splitDilimiter)[splitPosition]
            sampleFileText += file+' '+word+'\n'
        print('Sample File Text created.')
        sampleFile = open(self.path+'\\sample.txt', 'a+')
        sampleFile.write(sampleFileText)
        sampleFile.close()
        return

Например, давайте создадим объект DBSetter в main .py и протестируем их с Python по умолчанию (3.6.6) в простом cmd.exe и с Python Анаконды (3.6.6) в Anaconda Prompt:

from utils import database_setter

setter = database_setter.DBSetter('C:\\Users\\Victor.Lundgren\\Pictures\\Trabalho\\ASA') #choosing this folder for this example because it has few files in it.
setter.setDB(extension = '.png', splitFileName = False)

Здесь у нас есть история cmd в простом cmd.exe, который вызывает main .py:

> Microsoft Windows [versão 10.0.16299.492] (c) 2017 Microsoft
> Corporation. Todos os direitos reservados. Clink v0.4.9 [git:2fd2c2]
> Copyright (c) 2012-2016 Martin Ridgers http://mridgers.github.io/clink
> 
> 
> C:\Users\Victor.Lundgren>cd C:\Users\Victor.Lundgren\Google Drive\Mestrado\VC\Projeto
> 
> C:\Users\Victor.Lundgren\Google Drive\Mestrado\VC\Projeto>Python
> __main__.py C:\Users\Victor.Lundgren\Pictures\Trabalho\ASA\**\*.png Sample File Text created.
> 
> C:\Users\Victor.Lundgren\Google Drive\Mestrado\VC\Projeto>

Теперь выполняем Anaconda Promp из меню Windows и запускаем то же самое с моим Python 3.6.6 env:

> Clink v0.4.9 [git:2fd2c2] Copyright (c) 2012-2016 Martin Ridgers
> http://mridgers.github.io/clink
> 
> 
> (base) C:\Users\Victor.Lundgren>cd C:\Users\Victor.Lundgren\Google Drive\Mestrado\VC\Projeto
> 
> (base) C:\Users\Victor.Lundgren\Google Drive\Mestrado\VC\Projeto>activate Py3
> 
> (Py3) C:\Users\Victor.Lundgren\Google Drive\Mestrado\VC\Projeto>Python
> __main__.py C:\Users\Victor.Lundgren\Pictures\Trabalho\ASA\**\*.png Sample File Text created. Traceback (most recent call last):   File
> "__main__.py", line 6, in <module>
>     setter.setDB(extension = '.png', splitFileName = False)   File "C:\Users\Victor.Lundgren\Google Drive\Mestrado\VC\Projeto\utils\database_setter.py", line 19, in setDB
>     sampleFile = open(self.path+'\\sample.txt', 'a+') PermissionError: [Errno 13] Permission denied:
> 'C:\\Users\\Victor.Lundgren\\Pictures\\Trabalho\\ASA\\sample.txt'
> 
> (Py3) C:\Users\Victor.Lundgren\Google Drive\Mestrado\VC\Projeto>

1 Ответ

0 голосов
/ 05 июля 2018

После нескольких попыток переустановки Anaconda я обнаружил проблему. Мой антивирус (Bitdefender) исключительно блокировал версию Python, установленную Anaconda, и по какой-то причине не отображал никаких уведомлений о его блокировке, удалив блокировку, чтобы он работал правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...