python等价于GNU';cat&x27;这显示了独特的线条
有没有人用python编写GNU命令并愿意与大家分享?GNUCat实际上做了很多&我今天真的不想重新发明轮子。是的,我做了谷歌搜索&读完后我决定试试python等价于GNU';cat&x27;这显示了独特的线条,python,Python,有没有人用python编写GNU命令并愿意与大家分享?GNUCat实际上做了很多&我今天真的不想重新发明轮子。是的,我做了谷歌搜索&读完后我决定试试 编辑:我想修改它,使它只显示唯一的行。这取决于您想要的功能。如果你只想打印一个文件,你可以这样做 with open('myfile') as f: for line in f: print line, 或者连接一些文件,您可以这样做 filenames = ['file1', 'file2', 'file3'] for
编辑:我想修改它,使它只显示唯一的行。这取决于您想要的功能。如果你只想打印一个文件,你可以这样做
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,
没有一般性的答案。根据要复制的功能,代码将有所不同。要准确地复制一些奇怪和特殊的内容,请使用子流程
模块并调用cat
如果您想实现与cat相同的接口,这似乎是一个奇怪的要求。您可以调用cat,这样可以更自然地编写代码。我认为完全重新实施cat的唯一原因是为了家庭作业,如果这是你的原因,我希望你不要要求成品。最新:
感谢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)
对不起,我没说清楚。我想知道是否有人写了一些东西来完全复制GNUCAT。不,不是为了家庭作业——我想把它作为其他命令的基础。谢谢你的回答,我把它作为catuniq的基础。源代码见我的答案。因为
行中的行
对于列表是O(n),所以这里有O(n^2)运行时。您可以通过将行设置为一个集合来修复此问题,该集合具有O(1)成员资格测试:lines=set()
。修复了,谢谢拜耳!我在一个30k行的文件上尝试了这个方法,运行时间从15秒到标准库中的fileinput模块。您可以用一行代码替换大部分代码。谢谢,Ned——fileinput将行数从17行减少到了7行!所以,你不想要cat
,你想要uniq
(就功能而言)。@TZ——似乎是这样——15年以上的Unix编程&我忘了“uniq”。@TZ——迈克的答案仍然有效。uniq只处理彼此相邻的行,而不处理由其他唯一行分隔的行。