Подтвердить что ты не робот

Python - IOError: [Errno 13] Разрешение отклонено:

Я получаю IOError: [Errno 13] Permission denied, и я не знаю, что не так с этим кодом.

Я пытаюсь прочитать файл с абсолютным путем (это означает только file.asm),

и относительный путь (что означает /.../file.asm), и я хочу, чтобы программа записывала файл в любой путь - если он является абсолютным, он должен записывать его в текущий каталог; в противном случае к указанному пути.

код:

#call to main function
if __name__ == '__main__':
    assem(sys.argv[1])


import sys

def assem(myFile):
    from myParser import Parser
    import code
    from symbolTable import SymbolTable

    table=SymbolTable()

    # max size of each word
    WORD_SIZE = 16
    # rom address to save to
    rom_addrs = 0
    # variable address to save to
    var_addrs = 16

    # new addition
    if (myFile[-4:] == ".asm"):
        newFile = myFile[:4]+".hack"

    output = open(newFile, 'w') <==== ERROR

приведенная погрешность:

IOError: [Errno 13] Permission denied: '/Use.hack'

способ выполнения кода:

python assembler.py Users/***/Desktop/University/Add.asm 

Что я здесь делаю неправильно?

4b9b3361

Ответ 1

Похоже, вы пытаетесь заменить расширение следующим кодом:

if (myFile[-4:] == ".asm"):
    newFile = myFile[:4]+".hack"

Однако, похоже, вы перепутали индексы массива. Попробуйте следующее:

if (myFile[-4:] == ".asm"):
    newFile = myFile[:-4]+".hack"

Обратите внимание на использование -4 вместо просто 4 во второй строке кода. Это объясняет, почему ваша программа пытается создать /Use.hack, который является первыми четырьмя символами вашего имени файла (/Use), приложенным к нему .hack.

Ответ 2

Просто закройте открытый файл, в который вы собираетесь писать.

Ответ 3

У вас недостаточно прав для записи в корневой каталог. См. Ведущую косую черту в имени файла?

Ответ 4

Это случилось со мной, когда я использовал "shutil.copyfile" вместо "shutil.copy". Разрешения были испорчены.

Ответ 5

Может быть, вы пытаетесь открыть папку with open, проверьте это один раз.

Ответ 6

У меня ничего сверху не сработало. Таким образом, я решил свою проблему с этим обходным путем. Просто убедитесь, что вы добавили SYSTEM в папку каталога. Я надеюсь, что это поможет somoene.

import os
# create file
@staticmethod
def create_file(path):
    if not os.path.exists(path):
        os.system('echo # > {}'.format(path))

# append lines to the file
split_text = text_file.split('\n')
    for st in split_text:
        os.system('echo {} >> {}'.format(st,path))

Ответ 7

У меня была такая же проблема. В моем случае у пользователя не было разрешения на запись в каталог назначения. В моем случае помогла следующая команда:

chmod 777 University

Ответ 8

Для меня это проблема с разрешениями.

Используйте приложение "Take Ownership" в этой конкретной папке. Однако иногда это работает только временно и не является постоянным решением.

Ответ 9

Конечно, вы можете. Попробуйте изменить эту строку:

output = open(newFile, 'w')

в

output = open("./%s" % (newFile), 'w')

он должен сохранить ваш файл в локальном каталоге.