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

时间:2012-05-13 22:29:49

标签: python file io

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

我在这里做错了什么?

11 个答案:

答案 0 :(得分:27)

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

答案 1 :(得分:16)

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

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

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

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

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

答案 2 :(得分:10)

您没有足够的权限来写入根目录。请参阅文件名中的前导斜杠?

答案 3 :(得分:5)

当我使用'shutil.copyfile'而不是'shutil.copy'时,发生了这种情况。权限搞砸了。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

chmod 777 University

答案 7 :(得分:0)

检查是否在框,投递箱等驱动器中实现代码。如果将要实现的文件复制到计算机上的本地文件夹中,则应该可以消除该错误。

答案 8 :(得分:0)

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

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

答案 9 :(得分:-1)

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

使用&#39;取得所有权&#39;特定文件夹上的应用程序。 然而,这有时似乎只是暂时的,并不是永久的解决方案。

答案 10 :(得分:-3)

当然可以。尝试更改此行:

output = open(newFile, 'w')

为:

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

它应该将您的文件保存到本地目录。