显示唯一行的GNU 'cat'的Python等效实现
有没有人用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 的唯一理由就是为了做作业,如果真是这样,我希望你不要为了这个原因而要求现成的代码。