显示唯一行的GNU 'cat'的Python等效实现

3 投票
2 回答
626 浏览
提问于 2025-04-15 19:02

有没有人用Python写过GNU的cat命令,并愿意分享一下?GNU的cat命令其实功能挺多的,我今天不想重新发明轮子。是的,我确实在谷歌上搜索过,但在看了太多关于小猫和蛇的悲伤故事后,我决定来这里问问。

补充一下:我想对它进行修改,让它只显示独特的行。

2 个回答

3

最新消息:

感谢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年2月9日):

这是我最终得到的结果。它满足了我当前的需求。感谢Mike Graham的帮助。

#!/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)
2

这要看你想要什么功能。如果你只是想打印一个文件,你可以这样做:

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 的唯一理由就是为了做作业,如果真是这样,我希望你不要为了这个原因而要求现成的代码。

撰写回答