파이썬 배우는 기념으로 만든 소스(.h, .cpp)의 줄 수 세는 프로그램.
현재 디렉토리를 포함한 모든 하위디렉토리에 속한 소스의 줄 수를 보여준다.
# -*-coding:utf-8-*-
import os
def count_line(filename):
file = open(filename)
line_num = 0
while (file.readline()):
line_num += 1
return line_num
def count_code_lines(dirname):
file_line_list = []
filenames = os.listdir(dirname)
for filename in filenames:
filename = dirname + '\\' + filename
if (os.path.isdir(filename)):
file_line_list += count_code_lines(filename)
else:
if ((len(filename) > len('.h') and filename[-2:] == '.h') or
(len(filename) > len('.cpp') and filename[-4:] == '.cpp')):
file_line_list.append((filename, count_line(filename)))
return file_line_list
def get_dir_list(path):
dir_list = []
if (os.path.isdir(path)):
dir_list.append(path)
header = os.path.split(path)[0]
if (header == ''):
return dir_list
else:
dir_list += get_dir_list(header)
return dir_list
file_line_list = count_code_lines('.')
dir_line_dict = {}
for filename, line_num in file_line_list:
dir_list = get_dir_list(filename)
for dir in dir_list:
if (not dir in dir_line_dict):
dir_line_dict[dir] = 0
dir_line_dict[dir] = dir_line_dict[dir] + line_num
dirnames = dir_line_dict.keys()
dirnames.sort()
for dirname in dirnames:
print "%10d %s"%(dir_line_dict[dirname], dirname)
출력예 : 뭐, 대략 이런식
8388 .
409 .\MemoryPool
136 .\MemoryPool\profiler
862 .\PicTest
687 .\SimpleMFC
403 .\SimpleMFC2
1627 .\SimpleTest
142 .\SimpleTest2
59 .\UDPClient
155 .\UDPServer
963 .\WebViewer
112 .\cliWrap
19 .\cppLib
2950 .\rvo_test
136 .\rvo_test\profiler
472 .\rvo_test\srv_cntr
2114 .\rvo_test\sti