wc、再び
30分プログラム、その620。昔にやったwcを再実装してみる。
which コマンドの実装の書き直し - forest bookを読んで、昔やったのをもう一度やってみるのもおもしろいかも、と思ったのでやってみる。
前にやったのはwc.py - みずぴー日記と実に2年以上前。
全然変わってないかと思いきや、さすがに変化してた。昔のやつより、コードが短かく、メモリを豪快に使うようになってた。進歩といっていいのかは微妙なとこだと思う。
使い方
$ python wc.py foo 33 88 683 foo
昔の
#!/usr/bin/env python import sys import re def wc(path): file = open(path) rexp = re.compile(r'\s+') size = 0 lines = 0 words = 0 for line in file.readlines(): size += len(line) lines += 1 words += len(rexp.split(line.strip())) return (lines,words,size,path) lines = words = size = 0 for path in sys.argv[1:]: (l,w,s,path) = wc(path) lines += l words += w size += s print "%8d%8d%8d %s" % (l,w,s,path) if len(sys.argv) != 2: print "%8d%8d%8d total" % (lines,words,size)
ソースコード
#! /usr/bin/python # -*- mode:python; coding:utf-8 -*- import sys def lines(s): return len(s.split("\n")) def words(s): return len(s.split()) def chars(s): return len(s) if __name__ == '__main__': for path in sys.argv[1:]: s = open(path).read() print "%d %d %d %s" % (lines(s), words(s), chars(s), path)