在文件中打印输出而不是 python 中的标准输出
Printing the output in a file instead of the stdout in python
我正在编写代码,其中我正在生成一些规则。下面是我的代码的最后几行:
for _,i in enumerate(range(no_of_label+1)):
if _ in temp_key:
rule_pro.append(temp_lab[_])
elif _ == no_of_label:
rule_pro.append(class_)
else:
rule_pro.append("*")
print(*rule_pro, sep = ",")
现在,在代码之间,我也在标准输出中生成了 3-4 个输出。但是我需要将这个 rule_pro
写入一个文件,比如 Outputfile
。每当我尝试将此内容从 stdout 复制到该文件时,stdout 中的所有内容都会被复制,但我只需要将 rule_pro
放入文件中即可。我怎样才能做到这一点?请帮忙!
Edit_1 :
with open('Output_rule_c45_rise_format', 'w') as file_handler:
file_handler.write(str(rule_pro))
这是有效的,但我没有得到我想要的格式,我在 stdout
中使用 print(*rule_pro, sep = ",")
。
stdout
输出如下:
*,*,1,*,0
*,*,2,2,1
*,*,*,3,1
*,*,*,4,2
*,*,3,*,2
但是修改代码,在那个输出文件中我变得像:
['*', '*', '1', '*', '0']['*', '*', '2', '2', '1']['*', '*', '*', '3', '1']['*', '*', '*', '4', '2']['*', '*', '3', '*', '2']
但我不需要这第三个括号,我需要将它们分行打印。我需要做哪些改变?
Edit_2:
现在我在做:
for rule in rule_pro:
#rule_line = ','.join(map(str, rule))
#rule_line = "\n".join(map(str, rule))
rule_line = "\n".join(map(str, rule)) + '\n'
file_handler.write(rule_line)
但这给出的输出为:
*
*
1
*
0
*
*
2
2
1
*
*
*
3
1
*
*
*
4
2
*
*
3
*
2
检查文档:
Python 文件处理:https://www.w3schools.com/python/python_file_handling.asp
Python 文件打开:https://www.w3schools.com/python/python_file_open.asp
Python 文件写入:https://www.w3schools.com/python/python_file_write.asp
Python 文件删除:https://www.w3schools.com/python/python_file_remove.asp
编辑 1 后
您似乎正在将列表的字符串表示形式写入文件。
您应该首先尝试从列表中创建一个字符串。
下面的代码应该可以帮助您转换它。它遍历列表并获取每个项目。在这种情况下,您似乎有一个包含列表的列表,因此您的项目是一个列表。在此之后,通过使用规则中的每个项目(这是一个列表)将字符串 joined/created 保存在一个变量中。 rule_line 是一个字符串,可以写入文件。添加了一个换行符,使其位于文件的下一行。
with open('Output_rule_c45_rise_format', 'w') as file_handler:
for rule in rule_pro:
rule_line = ','.join(map(str, rule)) + '\n'
file_handler.write(rule_line)
假设 rule_pro 是列表的列表,这应该可以工作。
编辑 2 后
IndentationError 是空格 and/or 制表符的一致性问题。尝试在代码中仅使用制表符 或 仅 4 个空格。不要在缩进中混用制表符和空格。
如果 rule_pro 是一个带有列表的列表,它看起来像这样。
rule_pro = [['*', '*', '1', '*', '0'],
['*', '*', '2', '2', '1'],
['*', '*', '*', '3', '1'],
['*', '*', '*', '4', '2'],
['*', '*', '3', '*', '2']]
您可以通过尝试以下操作来检查您的线路是否正确:
for rule in rule_pro:
rule_line = ','.join(map(str, rule)) + '\n'
print(rule_line)
请检查您的 rule_pro 列表是否与我想到的 rule_pro 相似。
我正在编写代码,其中我正在生成一些规则。下面是我的代码的最后几行:
for _,i in enumerate(range(no_of_label+1)):
if _ in temp_key:
rule_pro.append(temp_lab[_])
elif _ == no_of_label:
rule_pro.append(class_)
else:
rule_pro.append("*")
print(*rule_pro, sep = ",")
现在,在代码之间,我也在标准输出中生成了 3-4 个输出。但是我需要将这个 rule_pro
写入一个文件,比如 Outputfile
。每当我尝试将此内容从 stdout 复制到该文件时,stdout 中的所有内容都会被复制,但我只需要将 rule_pro
放入文件中即可。我怎样才能做到这一点?请帮忙!
Edit_1 :
with open('Output_rule_c45_rise_format', 'w') as file_handler:
file_handler.write(str(rule_pro))
这是有效的,但我没有得到我想要的格式,我在 stdout
中使用 print(*rule_pro, sep = ",")
。
stdout
输出如下:
*,*,1,*,0
*,*,2,2,1
*,*,*,3,1
*,*,*,4,2
*,*,3,*,2
但是修改代码,在那个输出文件中我变得像:
['*', '*', '1', '*', '0']['*', '*', '2', '2', '1']['*', '*', '*', '3', '1']['*', '*', '*', '4', '2']['*', '*', '3', '*', '2']
但我不需要这第三个括号,我需要将它们分行打印。我需要做哪些改变?
Edit_2:
现在我在做:
for rule in rule_pro:
#rule_line = ','.join(map(str, rule))
#rule_line = "\n".join(map(str, rule))
rule_line = "\n".join(map(str, rule)) + '\n'
file_handler.write(rule_line)
但这给出的输出为:
*
*
1
*
0
*
*
2
2
1
*
*
*
3
1
*
*
*
4
2
*
*
3
*
2
检查文档: Python 文件处理:https://www.w3schools.com/python/python_file_handling.asp
Python 文件打开:https://www.w3schools.com/python/python_file_open.asp
Python 文件写入:https://www.w3schools.com/python/python_file_write.asp
Python 文件删除:https://www.w3schools.com/python/python_file_remove.asp
编辑 1 后
您似乎正在将列表的字符串表示形式写入文件。 您应该首先尝试从列表中创建一个字符串。
下面的代码应该可以帮助您转换它。它遍历列表并获取每个项目。在这种情况下,您似乎有一个包含列表的列表,因此您的项目是一个列表。在此之后,通过使用规则中的每个项目(这是一个列表)将字符串 joined/created 保存在一个变量中。 rule_line 是一个字符串,可以写入文件。添加了一个换行符,使其位于文件的下一行。
with open('Output_rule_c45_rise_format', 'w') as file_handler:
for rule in rule_pro:
rule_line = ','.join(map(str, rule)) + '\n'
file_handler.write(rule_line)
假设 rule_pro 是列表的列表,这应该可以工作。
编辑 2 后
IndentationError 是空格 and/or 制表符的一致性问题。尝试在代码中仅使用制表符 或 仅 4 个空格。不要在缩进中混用制表符和空格。
如果 rule_pro 是一个带有列表的列表,它看起来像这样。
rule_pro = [['*', '*', '1', '*', '0'],
['*', '*', '2', '2', '1'],
['*', '*', '*', '3', '1'],
['*', '*', '*', '4', '2'],
['*', '*', '3', '*', '2']]
您可以通过尝试以下操作来检查您的线路是否正确:
for rule in rule_pro:
rule_line = ','.join(map(str, rule)) + '\n'
print(rule_line)
请检查您的 rule_pro 列表是否与我想到的 rule_pro 相似。