0
votes

Comment écrivez-vous la sortie d'une fonction dans un fichier?

La fonction Je souhaite écrire la sortie d'IS: xxx

La liste étant passée via display_pokemon est remplie par l'utilisateur précédemment comme display_pokemon puis imprime quelque chose comme: < BlockQuote>

Nom du Pokémon N ° 1: Pikachu

capacité de pokémon n ° 1: Thunderbolt

et cette sortie est ce que je veux collecter à partir de cette fonction pour écrire dans un fichier.

essentiellement c'est comme si je veux que ma principale () ait l'air: < Pré> xxx


3 commentaires

Vous devez réorganiser votre code. Séparez-le dans des fonctions qui formatent des données et des fonctions qui écrivent des données. Ensuite, vous pouvez appeler la fonction de formatage et écrire son résultat au fichier.


Consultez cette question Stackoverflow.com/Questtions/34571390/... je pense que cela a ce dont vous avez besoin.


La raison pour laquelle vous rencontrez des difficultés est que ce n'est pas une "sortie" de la fonction, c'est quelque chose que votre fonction provoque l'affichage de Imprimer . Pour récupérer des informations à partir d'une fonction, vous devez utiliser retour .


4 Réponses :


0
votes

Alors, ce que vous voulez faire est:

def display_pokemon(pokemon_list):
    file_name = input('"\nEnter the name of the file?: "')
    with open(file_name, 'w') as file:
        pokemon_count = 0
        for x in pokemon_list:
            pokemon_count += 1
            # Requirement 5
            pokemon_name = "Name of Pokemon #{}: ".format(pokemon_count) + x.get_name()
            print(pokemon_name)
            file.write(pokemon_name + '\n')
            pokemon_ability = "Ability of Pokemon #{}: ".format(pokemon_count) + x.get_ability()
            print(pokemon_ability)
            file.write(pokemon_ability)


0 commentaires

2
votes

Le premier changement que vous feriez est à votre display_pokemon code>. Au lieu d'imprimer cette chaîne, vous pouvez l'ajouter à un tableau. XXX PRE>

Ensuite, écrivez simplement à une destination de fichier: P>

def main() :
    pokemon_list = add_pokemon() 
    to_write = display_pokemon(pokemon_list)
    file_name = r"some/file.py"

    def save_file(file_name, to_write):
        file = open(file_name, "w+")
        for i in to_write:
            file.write(i)
            file.write("\n")
  
        file.close() 

    save_file(file_name, to_write) 


1 commentaires

J'aurais dû mention que j'ai besoin de "l'écriture" pour être contenue dans la fonction de sauvegarde_data dans Main, c'est pourquoi je suis bloqué à ce mur en essayant de collecter les résultats imprimés de display_pokemon et de passer à l'écriture. Donc, je ne peux pas utiliser votre solution de tableau, désolé.



0
votes

Votre fonction utilise actuellement sys.stdout comme fichier de destination codé dur pour les appels sur Imprimer . Rendre le fichier à utiliser un argument à la place; Vous pouvez toujours utiliser sys.stdout comme défaut . xxx

Vous pouvez désormais appeler la fonction avant d'écrire à la sortie standard, ou transmettez un fichier différent: xxx


0 commentaires

0
votes

Vous pouvez utiliser le redirect_stdout Contexte Manager à partir de contextLib pour rediriger temporairement le stdout temporairement Par exemple, le code suivant rendrait la sortie de l'appel de fonction display_pokemon () à un fichier nommé file_name xxx


0 commentaires