如何组合两个Python脚本?

时间:2013-04-24 10:34:24

标签: python list text-files

我想将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()

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

3 个答案:

答案 0 :(得分: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__'”这个习惯用法允许你编写一个既可以作为程序运行又可以用作库的脚本。如果您将脚本作为程序运行,则块将运行。如果从其他脚本导入它,则不会 - 因此您可以使用在脚本中定义的基本构建块执行其他操作。

答案 1 :(得分:1)

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

答案 2 :(得分:-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)