os.walk
PythonRecipe に書き込み始めて1週間くらい。自分が書いたネタつかって自分が書いたテキスト量を確認してみることにしてみた。ひどい自己満足だ。
記事は recipe018_予約語.txt のようなファイルに書き溜めている、正規表現だと recipe\d{3}_.+?\.txt 、その他の雑多なメモ、コード、 .svn フォルダなどなどが散在しているといった状態のディレクトリを os.walk で読み取ってみた。
# -*- encoding: utf-8 -*- u""" 今まで執筆した行数文字数を出力してニヤニヤする """ import codecs import os import re def count_txt(dir, match=lambda f:True, encode=u"utf-8"): u""" dir 以下のファイルを探索し文字数、行数、ファイル数をカウントする。 ただし match の引数に与えて真値が返ってきたもののみ対象。 引数: dir - 探索するディレクトリを示す文字列 match - 調べるファイルに一致するかどうか調べる callable オブジェクト encode - テキストのエンコード 戻り値: 文字数、行数、ファイル数のタプル。 """ count_char = 0 count_line = 0 count_file = 0 for root, dirs, files in os.walk(dir): # .svn フォルダなどの対策 temp_dirs = list(dirs) dirs[:] = [] for dir_name in temp_dirs: if not dir.startswith(u'.'): dirs.append(dir_name) for file_name in files: if not match(file_name): continue count_file += 1 for line in codecs.open(os.path.join(root, file_name), 'r', encode): count_line += 1 count_char += len(line) return count_char, count_line, count_file def main(): count_char, count_line, count_file = count_txt(u'.', re.compile(ur"^recipe\d{3}_.+?\.txt$").match, u"cp932") print u"文字数: %8d" % count_char print u"行数 : %8d" % count_line print u"記事数: %8d" % count_file raw_input(u"終了します。Enter キーを押してください: ") if __name__ == '__main__': main()
Windows XP + Python だしせっかくだからダブルクリック起動してもウィンドウ消えずに止まって見えるようにすることに。raw_input の出番。この組み込み関数使ったの久しぶりだ。これをファイルに保存してダブルクリック。出力結果。
文字数: 41839 行数 : 1409 記事数: 15 終了します。Enter キーを押してください:
ファイル作っただけでほとんど書いてない(もちろん投稿してない)のが2つあるから記事数 13 。1週間で 7 つ書くという目標は達成できた模様。これ本にすると何ページぐらいなんだろう。 1行 40 文字、1ページ 30 行ぐらいで考えると・・・ 30 〜 40 ページ前後? あらためて本の著者やアルファブロガーのやばさを認識した気がする。