web-dev-qa-db-fra.com

Python - IOError: [Errno 13] Permission refusée:

Je reçois IOError: [Errno 13] Permission denied et je ne sais pas ce qui ne va pas avec ce code.

J'essaie de lire un fichier avec un chemin absolu (ce qui signifie seulement file.asm),

et un chemin relatif (signifiant /.../file.asm), et je veux que le programme écrive le fichier dans le chemin indiqué - s'il est absolu, il doit l'écrire dans le répertoire en cours; sinon, au chemin donné.

le code:

#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

l'erreur donnée:

IOError: [Errno 13] Permission denied: '/Use.hack'

la façon dont j'exécute le code: 

python assembler.py Users/***/Desktop/University/Add.asm 

Qu'est-ce que je fais mal ici?

43
Itzik984

Il semblerait que vous essayiez de remplacer l'extension par le code suivant:

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

Cependant, vous semblez avoir mélangé les index de tableau. Essayez ce qui suit:

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

Notez l'utilisation de -4 au lieu de 4 dans la deuxième ligne de code. Ceci explique pourquoi votre programme essaie de créer /Use.hack, qui est le premier quatre caractères de votre nom de fichier (/Use), auquel .hack est ajouté.

16
Greg Hewgill

Il suffit de fermer le fichier ouvert où vous allez écrire.  

27
Vicky

Vous ne disposez pas des autorisations suffisantes pour écrire dans le répertoire racine. Voir la barre oblique sur le nom du fichier?

9
James Youngman

Cela m'est arrivé quand j'utilisais 'shutil.copyfile' au lieu de 'shutil.copy' Les autorisations étaient foutues. 

5
Jason

Peut-être que vous essayez d'ouvrir le dossier with open, cochez-le une fois.

0
Mohan Babu

Pour moi, rien d’en haut ne fonctionnait. J'ai donc résolu mon problème avec cette solution de contournement. Il suffit de vérifier que vous avez ajouté SYSTEM dans le dossier répertoire. J'espère que cela aidera 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