0
votes

Script Python qui crée un nouveau fichier et renvoie la liste des fichiers

J'essaie de créer un script python appelé script.py avec la fonction new_directory qui crée un nouveau répertoire dans le répertoire de travail actuel, puis crée un nouveau fichier vide dans le nouveau répertoire et renvoie la liste des fichiers dans ce répertoire . La sortie que j'obtiens est ["script.py"] qui semble correcte mais me donne cette erreur:

RuntimeErrorElement (RuntimeError, Erreur sur la ligne 5: directory = os.mkdir ("/ home / PythonPrograms") FileExistsError: [Errno 17] Le fichier existe: '/ home / PythonPrograms' )

import os

def new_directory(directory, filename):
  if os.path.isdir(directory) == False:
    directory = os.mkdir("/home/PythonPrograms")

  os.chdir("PythonPrograms")
  with open("script.py", "w") as file:
    pass

  # Return the list of files in the new directory
  return os.listdir("/home/PythonPrograms")

print(new_directory("PythonPrograms", "script.py"))

Comment corriger et pourquoi est-ce faux?


3 commentaires

Quelle est l'erreur?


Sans rapport: au lieu d'écrire: if os.path.isdir (directory) == False: , veuillez simplement écrire sinon os.path.isdir (répertoire) .


Oh désolé a propos de ca. Voici l'erreur que j'obtiens lors de l'exécution du script: RuntimeErrorElement (RuntimeError, Error on line 5: directory = os.mkdir ("/ home / PythonPrograms") FileExistsError: [Errno 17] Le fichier existe: '/ home / PythonPrograms')


3 Réponses :


0
votes

Je suppose que l'erreur que vous obtenez est que vous ne pouvez pas basculer les répertoires vers PythonPrograms ? Ce serait parce que votre répertoire de travail actuel python ne le contient pas. Si vous écrivez plus explicitement le répertoire vers lequel vous voulez basculer, par exemple en mettant os.chdir ("/ home / PythonPrograms") , alors cela peut fonctionner pour vous.

Dans l'idéal, vous devriez nous donner des traces de pile ou plus d'informations sur les erreurs, cependant


0 commentaires

0
votes

Je ne sais pas pourquoi dans votre code vous avez avec open ("script.py", "w") comme fichier: pass ,

mais voici mt way: p>

import os

os.mkdir('.\\Newfolder') # Create a new folder called Newfolder in the current directory
open('.\\Newfolder\\file.txt','w').close() # Create a new file called file.txt into Newfolder
print(os.listdir('.')) # Print out all the files in the current directory


1 commentaires

Cela laisserait vraisemblablement le fichier ouvert. L'utilisation de la syntaxe du gestionnaire de contexte ferme à nouveau le fichier. open ('. \\ Newfolder \\ file.txt', 'w'). close () corrigerait ce problème



0
votes

Comme d'autres l'ont dit, il est difficile de déboguer sans l'erreur. Dans les bonnes circonstances, votre code fonctionnera sans erreur. Comme @Jack l'a suggéré, je suppose que votre répertoire actuel n'est pas / home . Cela signifie que vous avez créé un répertoire appelé PythonPrograms dans le répertoire / home . os.chdir ("PythonPrograms") essaie de changer le répertoire en / PythonPrograms , qui n'existe pas.

J'ai essayé de retravailler votre code (sans le changer complètement), en quelque chose qui devrait fonctionner dans tous les cas. Je pense que la leçon ici est de travailler avec les variables que vous avez déjà (c'est-à-dire répertoire ), plutôt que de les coder en dur dans la fonction.

import os

def new_directory(directory, filename):

  if not os.path.isdir(directory):
    # Create directory within current directory
    # This is working off the relative path (from your current directory)
    directory = os.mkdir(directory)

  # Create file if does not exist
  # this is a one-liner version of you with...pass statement
  open(os.path.join(directory, filename), 'a').close()

  # Return the list of files in the new directory
  return os.listdir(directory)

print(new_directory("PythonPrograms", "script.py"))

J'espère que cela vous aidera.


2 commentaires

Merci @ J.Warren En théorie, cela a du sens. J'ai eu une erreur après l'exécution: Erreur sur la ligne 17: print (new_directory ("PythonPrograms", "script.py")) Erreur sur la ligne 12: open (os.path.join (répertoire, nom de fichier), 'a') .Fermer()


Ça marche. Juste eu à spécifier le chemin du répertoire. Merci encore @ J.Warren