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?
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é.
Il suffit de fermer le fichier ouvert où vous allez écrire.
Vous ne disposez pas des autorisations suffisantes pour écrire dans le répertoire racine. Voir la barre oblique sur le nom du fichier?
Cela m'est arrivé quand j'utilisais 'shutil.copyfile' au lieu de 'shutil.copy' Les autorisations étaient foutues.
Peut-être que vous essayez d'ouvrir le dossier with open
, cochez-le une fois.
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))