2012-05-13 96 views
35

私はIOError: [Errno 13] Permission deniedを取得していますが、私はこのコードが間違っているのか分かりません。Python - IOError:[Errno 13]アクセスが拒否されました:

私は、(のみ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

おそらく、あなたはrootディレクトリに書き込むべきprmissionsを持っていないかもしれません - そしてまさにそうです。 – Ingo

答えて

15

次のコードで拡張を置き換えるしようとしているようです:

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

しかし、あなたは、配列のインデックスが混ざっ持っているように見えます。次のことを試してみてください。

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

だけではなく4コードの2行目の-4の使用に注意してください。これは、あなたのプログラムが/Use.hackを作成しようとしている理由を説明しています。最初にの4文字にファイル名(/Use)が付加され、.hackが追加されています。

+0

はい、あなたは正しいです。しかし、今私は得ます: IOError:[Errno 2]そのようなファイルやディレクトリはありません: 'Users/itzikhanoch/Desktop/University/Add.hack' 私はなぜファイルを見つけるべきでしょうか?それはそれを書くことになった。 – Itzik984

+3

これで '/ User/... 'の代わりに' User/... 'を渡しているようです。大切なのはスラッシュです。先頭のスラッシュがなければ、現在のディレクトリの*サブディレクトリにあるファイルを開こうとしています。 –

9

ルートディレクトリに書き込むための十分な権限がありません。ファイル名の先頭のスラッシュを参照してください。

+0

は私がそれについて何かできることは何ですか?私のデスクトップのシンプルなフォルダにこれを書きます。何も特別なものはありません – Itzik984

+2

最初に '/'を削除してみてください。 – Ashe

+5

絶対パスと相対パスが何であるかを学びます。/fooのようなパスがどこにつながるかを学んでください。 – Ingo

-1

もちろん可能です。それがローカルディレクトリにファイルを保存する必要があり

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

:に

output = open(newFile, 'w') 

:この行を変更してみてください。

+0

今は何も書いていません...どこでもファイルを見つけることができません。 – Itzik984

+0

@ Itzik984:エラーが出なければ、ファイルはどこか*で書かれています。これは、ファイルを書き込んだプロセスの現在の作業ディレクトリである可能性があります。 –

+0

@GregHewgillあなたは正しいです。ごめんなさい。しかし、まだ、私はそれが現在の作業ディレクトリではなく、指定されたパスに書かれている必要があります... – Itzik984

23

書き込み先の開いているファイルを閉じるだけです。

+1

この回答は質問には意味がありません... – duskwuff

4

これは私が 'shutil.copy'の代わりに 'shutil.copyfile'を使用していたときに起こりました。許可が乱されました。

-2

私にとっては、これは権限の問題でした。

特定のフォルダで '所有権の取得'アプリケーションを使用します。 しかし、これは一時的にしか機能しないようで、永続的な解決策ではありません。

関連する問題