wc.py

mzp2007-04-20

30分シリーズ、その5。ネタ切れの予感。今回はwc。

$ python wc.py pn.rb
      15      34     239 pn.rb

$ python wc.py pn.rb bible
      15      34     239 pn.rb
   23589   39315 1609575 bible
   23604   39349 1609814 total
#!/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)
  • "単語"の定義がよくわからない。とりあえず、Haskellのwordsに従い空白文字で区切ってみた
  • 組み込みの正規表現記法がないので、ちょっと面倒
  • 多値返し最高