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的打印结果并将其传递给写入。所以我不能使用你的阵列解决方案,抱歉。