2012-05-13 132 views
35

我得到IOError: [Errno 13] Permission denied,我不知道这个代码有什么问题。Python - 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 

什么我错在这里做什么?

+2

最有可能你没有写入到根目录的权限 - 正确的,似乎 – Ingo

回答

15

它看起来像你试图取代用下面的代码扩展:

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

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

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

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

+0

是的,你是对的。但现在我得到: IOError:[Errno 2]没有这样的文件或目录:'Users/itzhanhan/Desktop/University/Add.hack' 即时通讯使用'w'为什么他应该找到任何文件?它应该写它。 – Itzik984

+3

现在看起来您正在传递'User/...'而不是'/ User/...'。请注意主要的斜线,这很重要。如果没有前导斜杠,您正尝试在当前目录*的*子目录中打开名为User的文件。 –

9

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

+0

有什么我可以做的吗?即时消息写入这个简单的文件夹在我的桌面上,没有什么特别的 – Itzik984

+2

只要尝试在开始时删除'/'。 – Ashe

+5

了解什么是绝对路径和相对路径 - 你弄错了。了解像/ foo这样的路径会在哪里领先。 – Ingo

-1

当然可以。尝试改变这一行:

output = open(newFile, 'w') 

到:

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

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

+0

现在它不会写任何东西......不能找到任何文件 – Itzik984

+0

@ Itzik984:如果你没有得到一个错误,那么该文件被写入*的某处*。那个地方很可能是编写该文件的进程的当前工作目录。 –

+0

@GregHewgill你是对的。抱歉。但我仍然需要将它写在给定的路径中,而不是当前工作的目录... – Itzik984

23

只需关闭要打开的文件。

+1

这个答案对这个问题没有意义... – duskwuff

4

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

-2

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

在该特定文件夹上使用“Take Ownership”应用程序。 但是,这有时似乎只是暂时的工作,并不是一个永久的解决方案。

相关问题