1

我想将 2 个 Python 脚本组合成 1 个脚本,因为它会更容易运行。最简单的方法是什么?

脚本 1:打开一个文本文件并将所需的字符串写入输出文件。

#!/usr/bin/env python

with open("mylist.txt") as f:
    with open("output1.txt", "w") as f1:
        for line in f:
            if "[Running] groups/" in line or "[FAILED!] groups/" in line:
                f1.write(line) 

脚本 2:打开脚本 1 保存的文本文件并用其他内容替换 2 个字符串并保存输出。

infile = "output1.txt"
outfile = "output2.txt"

delete_list = ["[Running]", "[FAILED!]"]
fin = open(infile)
fout = open(outfile, "w+")
for line in fin:
    for word in delete_list:
        line = line.replace(word, "link_to_path")
           fout.write(line)
fin.close()
fout.close()

所以脚本应该读取文本文件,只复制所需的字符串,然后用不同的字符串替换它们并将它们保存在文本文件中。

4

3 回答 3

2

将您的代码放入函数中,然后使用 if __name__ == '__main__' 块以适当的顺序运行适当的方法。以下函数的内容没有任何变化:

def create_list():
    with open("mylist.txt") as f:
        with open("output1.txt", "w") as f1:
            for line in f:
                if "[Running] groups/" in line or "[FAILED!] groups/" in line:
                    f1.write(line) 

def modify_list():
    infile = "output1.txt"
    outfile = "output2.txt"

    delete_list = ["[Running]", "[FAILED!]"]
    fin = open(infile)
    fout = open(outfile, "w+")
    for line in fin:
        for word in delete_list:
            line = line.replace(word, "link_to_path")
               fout.write(line)
    fin.close()
    fout.close()

if __name__ == '__main__':
    create_list()
    modify_list()

如果您有时需要完全使用不同的序列,但具有相同的基本操作,您可以从另一个脚本导入脚本并运行不同的功能组合:

import myscript
# this script only creates the list, not modifying it at all

if __name__ == '__main__':
    myscript.create_list()

转换为函数应该让您考虑在您的脚本中可以使哪些内容更灵活。例如,您是否需要对“output1.txt”和“output2.txt”进行硬编码?也许它们可以作为函数的参数?例如,您将能够传入从命令行获得的参数。然后,您可以在运行脚本时而不是在编写脚本时决定文件名。

看起来很奇怪的“if __name__ == '__main__'”习语允许您编写一个既可以作为程序运行又可以用作库的脚本。如果您将脚本作为程序运行,则该块运行。如果您从另一个脚本导入它,它不会 - 因此您可以使用您在脚本中定义的基本构建块来做其他事情。

于 2013-04-24T11:00:29.707 回答
1

为了更高效、更简洁的代码,您不需要将包含 12 行和 7 行代码的部分分离到文件中!在一个类中实现它以获得干净的代码!总比分开好。如果您拒绝,您可以导入另一个文件,例如使用import script2. 但是您导入的代码应该是方法或类!

于 2013-04-24T10:47:07.967 回答
-1
#!/usr/bin/env python


delete_list = ["[Running]", "[FAILED!]"]

with open("mylist.txt") as f:
     with open("output1.txt", "w") as f1:
        with open("output2.txt", "w") as f2:
            for line in f:
                 if "[Running] groups/" in line or "[FAILED!] groups/" in line:
                    f1.write(line)
                    for word in delete_list: 
                        line = line.replace(word, "link_to_path")
                    f2.write(line)
于 2013-04-24T10:53:04.630 回答