【问题标题】:How to combine two Python scripts? [closed]如何组合两个 Python 脚本? [关闭]
【发布时间】:2013-04-24 10:34:23
【问题描述】:

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

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

【问题讨论】:

  • 复制粘贴成二合一?或者将所有代码移动到函数中,并将两个脚本导入第三个脚本。究竟是什么问题?
  • 我想知道如何将它们组合成 1 个脚本,因为这样会更高效、更简洁。
  • with open("mylist.txt") as f, open("output1.txt", "w") as f1: 应该会为您省去很多麻烦:P

标签: python list text-files


【解决方案1】:

将您的代码放入函数中,然后使用 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__'”习语允许您编写一个既可以作为程序运行又可以作为库使用的脚本。如果您将脚本作为程序运行,则该块运行。如果您从另一个脚本导入它,它不会 - 因此您可以使用您在脚本中定义的基本构建块来做其他事情。

【讨论】:

  • 感谢您提供的信息,但我现在收到以下错误:“fin = open(infile) NameError: name 'infile' is not defined”
【解决方案2】:

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

【讨论】:

  • 如果这就是操作的全部代码,那么绝对没有理由为它创建一个类。少写类。这里一两个函数就足够了。
【解决方案3】:
#!/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)

【讨论】:

    猜你喜欢
    • 2015-10-19
    • 2017-02-09
    • 2014-07-31
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    • 2020-01-07
    • 2020-06-18
    • 1970-01-01
    相关资源
    最近更新 更多