代码之家  ›  专栏  ›  技术社区  ›  JohnnyLambada

python相当于gnu“cat”,显示独特的行

  •  3
  • JohnnyLambada  · 技术社区  · 15 年前

    有人写过GNU吗 cat 用python命令,愿意分享吗?GNU猫实际上做了相当多的工作,我不觉得今天真的想重新发明轮子。是的,我做过谷歌搜索,阅读后 too many sad stories of kittens vs snakes 我决定试试。

    编辑:我想修改它,使它只显示唯一的行。

    2 回复  |  直到 15 年前
        1
  •  2
  •   Mike Graham    15 年前

    这取决于您想要的功能。如果你只想打印一个文件,你可以

    with open('myfile') as f:
        for line in f:
            print line,
    

    或者连接一些文件,可以

    filenames = ['file1', 'file2', 'file3']
    for filename in filenames:
        with open(filename) as f:
            for line in f:
                print line,
    

    没有一般的答案。根据您想要复制的功能,您的代码将有所不同。要精确地复制一些奇怪和特殊的东西,请使用 subprocess 模块和呼叫CAT。

    如果您想要实现与cat相同的接口,这似乎是一个奇怪的需求。您可以调用cat,并且可以更自然地编写代码。我能完全重新实现cat的唯一原因是做作业,如果这是你的原因的话,我希望你不要要求得到成品。

        2
  •  3
  •   JohnnyLambada    15 年前

    最新的: 感谢Ned提供的文件输入提示!以下是最新消息:

    #!/usr/bin/python
    
    """cat the file, but only the unique lines
    """
    import fileinput
    
    if __name__ == "__main__":
        lines=set()
        for line in fileinput.input():
            if not line in lines:
                print line,
                lines.add(line)
    

    以前(2010-02-09):

    这就是我的结局。它能满足我的即时需要。谢谢你的帮助。

    #!/usr/bin/python
    """cat the file, but only the unique lines
    """
    import optparse
    import sys
    
    if __name__ == "__main__":
        parser = optparse.OptionParser()
        parser.set_usage('%prog [OPTIONS]')
        parser.set_description('cat a file, only unique lines')
    
        (options,args) = parser.parse_args()
    
        lines = set()
        for file in args:
            if file == "-":
                f = sys.stdin
            else:
                f = open(file)
            for line in f:
                if not line in lines:
                    print line,
                    lines.add(line)