osモジュールの wolk 関数はちょっと面白い。ディレクトリを指定して呼び出すと、中に含まれるディレクトリ名、サブディレクトリのリスト、ファイルのリストを返すジェネレータを返してくれる。典型的にはこうやって使うみたい。
import os
for base_dir, dirs, files in os.walk("."):
何らかの処理
そこで、ディレクトリに含まれるファイル数を列挙するスクリプトを書いてみた。
import os
import sys
for base_dir, dirs, files in os.walk(sys.argv[1]):
num = len(files)
print "%8d %-30s" % (num, base_dir)
実行結果:
^o^ > python count_files.py .
83 .
8 .\.git
10 .\.git\hooks
1 .\.git\info
1 .\.git\logs
0 .\.git\logs\refs
1 .\.git\logs\refs\heads
0 .\.git\logs\refs\remotes
1 .\.git\logs\refs\remotes\origin
1 .\.git\logs\refs\remotes\u
0 .\.git\objects
2 .\.git\objects\00
1 .\.git\objects\01
3 .\.git\objects\02
3 .\.git\objects\03
2 .\.git\objects\04
1 .\.git\objects\07
1 .\.git\objects\0c
2 .\.git\objects\0d
1 .\.git\objects\0e
1 .\.git\objects\0f
3 .\.git\objects\10
1 .\.git\objects\13
2 .\.git\objects\14
3 .\.git\objects\16
2 .\.git\objects\17
1 .\.git\objects\19
2 .\.git\objects\1a
3 .\.git\objects\1b
2 .\.git\objects\1c
1 .\.git\objects\1f
2 .\.git\objects\21
5 .\.git\objects\22
5 .\.git\objects\23
1 .\.git\objects\25
1 .\.git\objects\29
2 .\.git\objects\2c
1 .\.git\objects\2e
2 .\.git\objects\2f
2 .\.git\objects\30
1 .\.git\objects\33
1 .\.git\objects\35
1 .\.git\objects\36
1 .\.git\objects\37
1 .\.git\objects\39
3 .\.git\objects\3b
1 .\.git\objects\3c
2 .\.git\objects\40
1 .\.git\objects\41
1 .\.git\objects\42
3 .\.git\objects\43
1 .\.git\objects\44
1 .\.git\objects\49
4 .\.git\objects\4a
2 .\.git\objects\4b
2 .\.git\objects\4d
1 .\.git\objects\4e
3 .\.git\objects\4f
1 .\.git\objects\51
2 .\.git\objects\52
2 .\.git\objects\53
2 .\.git\objects\54
1 .\.git\objects\55
1 .\.git\objects\56
3 .\.git\objects\57
2 .\.git\objects\58
1 .\.git\objects\59
2 .\.git\objects\5a
3 .\.git\objects\5d
2 .\.git\objects\5e
2 .\.git\objects\5f
1 .\.git\objects\61
1 .\.git\objects\62
1 .\.git\objects\66
1 .\.git\objects\67
3 .\.git\objects\68
1 .\.git\objects\69
3 .\.git\objects\6a
2 .\.git\objects\6b
2 .\.git\objects\6c
1 .\.git\objects\6d
1 .\.git\objects\6f
1 .\.git\objects\70
1 .\.git\objects\71
1 .\.git\objects\72
1 .\.git\objects\75
1 .\.git\objects\76
1 .\.git\objects\77
1 .\.git\objects\78
1 .\.git\objects\79
1 .\.git\objects\7b
1 .\.git\objects\7c
2 .\.git\objects\7d
1 .\.git\objects\7f
2 .\.git\objects\80
1 .\.git\objects\85
2 .\.git\objects\86
1 .\.git\objects\87
1 .\.git\objects\88
1 .\.git\objects\89
1 .\.git\objects\8b
2 .\.git\objects\8d
1 .\.git\objects\8e
1 .\.git\objects\8f
1 .\.git\objects\91
2 .\.git\objects\93
1 .\.git\objects\94
3 .\.git\objects\95
1 .\.git\objects\96
3 .\.git\objects\97
1 .\.git\objects\98
2 .\.git\objects\9a
3 .\.git\objects\9b
1 .\.git\objects\9c
3 .\.git\objects\a0
2 .\.git\objects\a3
1 .\.git\objects\a6
1 .\.git\objects\a7
1 .\.git\objects\a9
1 .\.git\objects\ac
1 .\.git\objects\ad
1 .\.git\objects\ae
1 .\.git\objects\b0
2 .\.git\objects\b1
1 .\.git\objects\b3
3 .\.git\objects\b4
2 .\.git\objects\b7
1 .\.git\objects\b9
3 .\.git\objects\ba
1 .\.git\objects\bb
1 .\.git\objects\bd
1 .\.git\objects\c1
1 .\.git\objects\c2
1 .\.git\objects\c4
2 .\.git\objects\c6
2 .\.git\objects\c8
1 .\.git\objects\c9
2 .\.git\objects\cb
1 .\.git\objects\cd
2 .\.git\objects\ce
3 .\.git\objects\cf
2 .\.git\objects\d0
1 .\.git\objects\d3
4 .\.git\objects\d4
1 .\.git\objects\d7
3 .\.git\objects\d8
2 .\.git\objects\d9
2 .\.git\objects\da
1 .\.git\objects\db
3 .\.git\objects\dc
5 .\.git\objects\dd
1 .\.git\objects\e0
1 .\.git\objects\e2
1 .\.git\objects\e3
1 .\.git\objects\e6
1 .\.git\objects\e7
2 .\.git\objects\e9
1 .\.git\objects\ea
1 .\.git\objects\ec
5 .\.git\objects\ed
3 .\.git\objects\ee
1 .\.git\objects\ef
1 .\.git\objects\f0
1 .\.git\objects\f1
2 .\.git\objects\f2
1 .\.git\objects\f3
1 .\.git\objects\f4
2 .\.git\objects\f5
1 .\.git\objects\f8
1 .\.git\objects\fc
1 .\.git\objects\fd
1 .\.git\objects\fe
0 .\.git\objects\info
0 .\.git\objects\pack
0 .\.git\refs
1 .\.git\refs\heads
0 .\.git\refs\remotes
1 .\.git\refs\remotes\origin
1 .\.git\refs\remotes\u
0 .\.git\refs\tags
10 .\projecteuler
git のリポジトリのファイルが多いな。