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

我在这里做错了什么?

原文由 Itzik984 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 261
2 个回答

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

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

但是,您似乎混淆了数组索引。尝试以下操作:

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

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

原文由 Greg Hewgill 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

原文由 Vicky 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题