在文件中打印输出而不是 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 是一个字符串,可以写入文件。添加了一个换行符,使其位于文件的下一行。

Reference

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 相似。