web-dev-qa-db-ja.com

Python-IOError:[Errno 13]許可が拒否されました:

IOError: [Errno 13] Permission deniedを取得していますが、このコードで何が間違っているのかわかりません。

絶対パス(file.asmのみ)を指定してファイルを読み取ろうとしています。

相対パス(/.../file.asmを意味します)、指定されたパスにプログラムがファイルを書き込むようにします。絶対パスの場合、現在のディレクトリに書き込む必要があります。それ以外の場合は、指定されたパスに。

コード:

#call to main function
if __== '__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 

ここで何が間違っていますか?

47
Itzik984

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

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

ただし、配列のインデックスが混在しているように見えます。以下を試してください:

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

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

17
Greg Hewgill

書き込みを行う場所で開いているファイルを閉じるだけです。

27
Vicky

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

11
James Youngman

これは、「shutil.copy」ではなく「shutil.copyfile」を使用していたときに起こりました。権限が台無しになりました。

5
Jason

同じ問題がありました。私の場合、ユーザーには宛先ディレクトリへの書き込み権限がありませんでした。私の場合、次のコマンドが役に立ちました:

chmod 777 University
1
Sukhi

フォルダーwith openを開こうとしている可能性があります。一度確認してください。

0
Mohan Babu

私にとっては、上から何も機能しませんでした。そこで、この回避策で問題を解決しました。ディレクトリフォルダに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))
0
PythonMan