【问题标题】:Python - IOError: [Errno 13] Permission denied:Python - IOError:[Errno 13] 权限被拒绝:
【发布时间】:2012-05-13 22:29:48
【问题描述】:

我收到了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 

我在这里做错了什么?

【问题讨论】:

  • 很可能您没有写入根目录的权限 - 似乎是正确的

标签: python file io


【解决方案1】:

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

【讨论】:

  • 这个答案对这个问题毫无意义......
  • 这对我有用,这个人的意思是,如果你有要保存的文件夹打开,你需要关闭它
【解决方案2】:

您似乎正在尝试用以下代码替换扩展:

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

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

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

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

【讨论】:

  • 是的,你是对的。但现在我得到: IOError: [Errno 2] No such file or directory: 'Users/itzikhanoch/Desktop/University/Add.hack' 我正在使用 'w' 他为什么要找到任何文件?它应该写它。
  • 现在看起来您传递的是 User/... 而不是 /User/...。注意前导斜线,这很重要。如果没有前导斜杠,您将尝试在 当前目录的子目录 中打开一个名为 User 的文件。
【解决方案3】:

您没有足够的权限写入根目录。看到文件名前面的斜线了吗?

【讨论】:

  • 我能做些什么吗?我把它写到我桌面上的一个简单文件夹中,没什么特别的
  • 试着去掉开头的“/”。
  • 正是莱恩所说的。删除路径开头的 /。
【解决方案4】:

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

【讨论】:

    【解决方案5】:

    我遇到了同样的问题。在我的情况下,用户没有目标目录的写权限。以下命令对我有帮助:

    chmod 777 University
    

    【讨论】:

    • 这不是给用户写权限,而是给你系统上的每个人all权限;读、写和执行。我建议您查看用户组和权限,而不是像这样打开您的文件夹!
    • 完全同意。这就是我多次提到“在我的情况下”的原因。它是 AWS 中 Ubuntu EC2 上的应用程序,需要对特定文件夹的权限 777。此外,解决方法可以是从block-all开始,也可以从allow-all方法开始,然后进行优化;取决于用例。
    【解决方案6】:

    也许您正在尝试打开文件夹with open,请检查一次。

    【讨论】:

    • “检查一次”是什么意思
    【解决方案7】:

    对我来说,上面没有任何效果。所以我用这个解决方法解决了我的问题。只需检查您是否已在目录文件夹中添加了 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))
    

    【讨论】:

      【解决方案8】:

      检查您是否在盒子、保管箱等驱动器内实现代码。如果您将尝试实现的文件复制到计算机上的本地文件夹中,您应该能够摆脱错误。

      【讨论】:

      • 只是想知道这会如何影响它?我有这个错误,该文件位于已安装的 Google Drive(Google Drive File Stream)上。
      【解决方案9】:

      对我来说,这是一个权限问题。

      在该特定文件夹上使用“获取所有权”应用程序。 然而,这有时似乎只是暂时的,而不是永久的解决方案。

      【讨论】:

        【解决方案10】:

        仅供参考,我遇到了这个权限错误,因为它试图创建的文件已经被另一个程序打开/使用(是在上次运行脚本时创建的,我用 excel 打开它,然后在它试图重新创建它)

        将其留在这里以防其他人发现它有用,这不是问题的真正解决方案

        【讨论】:

          【解决方案11】:

          我收到此错误是因为该目录尚不存在。

          解决方法:创建目录

          import os
          if not os.path.exists(directory):
              os.makedirs(directory)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-06-11
            • 2013-05-02
            • 1970-01-01
            • 2017-11-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多