ファイルの文字数、ワード数、行数を数える

というのをやってる人がいたので、やってみた。

cf. 何とかPython版完成 - しんちゃんの日記

import sys

def count(str):
    words = str.split()
    word_cnt = len(words)
    char_cnt = len(str)
    lines = str.split("\n")
    line_cnt = len(lines)
    if lines[-1] == '':
        line_cnt -= 1
    return char_cnt, word_cnt, line_cnt

for file in sys.argv[1:]:
    content = open(file, "r").read()
    char_count, word_count, line_count = count(content)
    print "chars =", char_count, " words =", word_count, " lines =", line_count, " filename =", file

実行:

^o^ > mywc.py mywc.py
chars = 466  words = 59  lines = 19  filename = mywc.py

wcコマンドと比べてみる。

^o^ > wc mywc.py
 19  59 485 mywc.py

なんか文字数が違うな。ちょうど行数の分だけ違う、ってことは改行文字のせいか?
ためしに mywc.py の改行をCR+LFからLFだけに変えてみと:

^o^ > wc mywc.py
 19  59 466 mywc.py

文字数も合った。wcコマンドはCR+LFを2文字と数えて、(少なくともWindowsの)Pythonは1文字と数えるみたいだ。