Python 如何将一个函数的输出写入文件?

Python 如何将一个函数的输出写入文件?,python,function,file-writing,Python,Function,File Writing,我想要写入输出的函数是: def display_pokemon(pokemon_list): pokemon_count = 0 for x in pokemon_list: pokemon_count += 1 # Requirement 5 print("Name of Pokemon #{}: ".format(pokemon_count), x.get_name()) print(&qu

我想要写入输出的函数是:

def display_pokemon(pokemon_list):
    pokemon_count = 0
    for x in pokemon_list:
        pokemon_count += 1
        # Requirement 5
        print("Name of Pokemon #{}: ".format(pokemon_count), x.get_name())
        print("Ability of Pokemon #{}: ".format(pokemon_count), x.get_ability())
通过display_pokemon传递的列表由用户在前面填充,因为display_pokemon随后会打印如下内容:

口袋妖怪的名字#1:皮卡丘

口袋妖怪1的能力:霹雳

这个输出就是我想从这个函数中收集的,用来写入文件的输出

本质上,这就是我希望main()的外观:


所以你想做的是:

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)

所以你想做的是:

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)

您要做的第一个更改是
显示\u pokemon
。您可以将其添加到数组中,而不是打印此字符串

def display_pokemon(pokemon_list):
    output = []
    pokemon_count = 0
    for x in pokemon_list:
        pokemon_count += 1
        # Requirement 5
        print("Name of Pokemon #{}: ".format(pokemon_count), x.get_name())
        print("Ability of Pokemon #{}: ".format(pokemon_count), x.get_ability())
        # Writing to output
        output.append(f"Name of Pokemon #{pokemon_count}: {x.get_name()}")
        output.append(f"Ability of Pokemon #{pokemon_count}: {x.get_ability()}")
    return output
然后,只需写入文件目标:

def main():
    pokemon_list = add_pokemon()
    to_write = display_pokemon(pokemon_list)

    file_name = r"some\file.txt"
    file = open(file_name, "w+")
    for i in to_write:
        file.write(i)
        file.write("\n")
  
    file.close()
编辑:如果希望在
保存文件()函数中写入,则main的代码将更改为:

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) 

您要做的第一个更改是
显示\u pokemon
。您可以将其添加到数组中,而不是打印此字符串

def display_pokemon(pokemon_list):
    output = []
    pokemon_count = 0
    for x in pokemon_list:
        pokemon_count += 1
        # Requirement 5
        print("Name of Pokemon #{}: ".format(pokemon_count), x.get_name())
        print("Ability of Pokemon #{}: ".format(pokemon_count), x.get_ability())
        # Writing to output
        output.append(f"Name of Pokemon #{pokemon_count}: {x.get_name()}")
        output.append(f"Ability of Pokemon #{pokemon_count}: {x.get_ability()}")
    return output
然后,只需写入文件目标:

def main():
    pokemon_list = add_pokemon()
    to_write = display_pokemon(pokemon_list)

    file_name = r"some\file.txt"
    file = open(file_name, "w+")
    for i in to_write:
        file.write(i)
        file.write("\n")
  
    file.close()
编辑:如果希望在
保存文件()函数中写入,则main的代码将更改为:

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) 

函数当前使用
sys.stdout
作为调用
print
的硬编码目标文件。使文件改为使用参数;您仍然可以使用
sys.stdout
作为默认值


函数当前使用
sys.stdout
作为调用
print
的硬编码目标文件。使文件改为使用参数;您仍然可以使用
sys.stdout
作为默认值


您可以使用
contextlib
中的
redirect\u stdout
上下文管理器临时重定向stdout 例如,下面的代码将函数调用的输出显示到名为
file\u name

with open(file_name, 'w') as out, contextlib.redirect_stdout(out):
    display_pokemon(pokemon_list)

您可以使用
contextlib
中的
redirect\u stdout
上下文管理器临时重定向stdout 例如,下面的代码将函数调用的输出显示到名为
file\u name

with open(file_name, 'w') as out, contextlib.redirect_stdout(out):
    display_pokemon(pokemon_list)

你应该重新认识你的代码。将其分为格式化数据的函数和写入数据的函数。然后,您可以调用格式化函数并将其结果写入文件。检查这个问题,我认为它符合您的需要。您遇到困难的原因是,这不是函数的“输出”,而是您的函数使用
print
显示的内容。要从函数中获取信息,应使用
return
。应重新定义代码。将其分为格式化数据的函数和写入数据的函数。然后,您可以调用格式化函数并将其结果写入文件。检查这个问题,我认为它符合您的需要。您遇到困难的原因是,这不是函数的“输出”,而是您的函数使用
print
显示的内容。要从函数中获取信息,您应该使用
return
。我应该提到,我需要在main中的save_data函数中包含“writing”,这就是为什么我被困在这堵墙上,试图收集display_pokemon的打印结果并将其传递给writing。所以我不能使用你的数组解决方案,对不起。我应该提到,我需要在main中保存_数据的功能中包含“写入”,这就是为什么我被困在这堵墙上,试图收集display_pokemon的打印结果并将其传递给写入。所以我不能使用你的阵列解决方案,抱歉。