Python - IOError:[Errno 13]权限被拒绝:

Itz*_*984 48 python io file

我得到了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
Run Code Online (Sandbox Code Playgroud)

给出的错误:

IOError: [Errno 13] Permission denied: '/Use.hack'
Run Code Online (Sandbox Code Playgroud)

我执行代码的方式:

python assembler.py Users/***/Desktop/University/Add.asm 
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?

Vic*_*cky 29

只需关闭要写入的打开文件即可.

  • 这个答案对于这个问题毫无意义...... (9认同)
  • 这对我有用,这个人的意思是,如果您要保存的文件夹处于打开状态,则需要将其关闭 (2认同)

Gre*_*ill 17

看起来您正在尝试使用以下代码替换扩展名:

if (myFile[-4:] == ".asm"):
    newFile = myFile[:4]+".hack"
Run Code Online (Sandbox Code Playgroud)

但是,您似乎混淆了数组索引.请尝试以下方法:

if (myFile[-4:] == ".asm"):
    newFile = myFile[:-4]+".hack"
Run Code Online (Sandbox Code Playgroud)

注意使用-4而不是仅仅4在第二行代码中.这解释了为什么你的程序试图创建/Use.hack,这是你的文件名()的四个字符/Use,.hack并附加到它.

  • 现在看起来你正在传递`User/...`而不是`/ User/...`.注意前导斜杠,这很重要.如果没有前导斜杠,您将尝试在当前目录*的*子目录中打开一个名为`User`的文件. (4认同)

Jam*_*man 11

您没有足够的权限写入根目录.查看文件名的前导斜杠?

  • 只需尝试在开始时删除"/". (2认同)
  • 正是Len所说的.删除路径开头的/. (2认同)

小智 5

当我使用'shutil.copyfile'而不是'shutil.copy'时,这发生在我身上.权限搞砸了.