2012-05-13 149 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」應用程序。 但是,這有時似乎只是暫時的工作,並不是一個永久的解決方案。

相關問題