import os
class MyCodeCount:
def __init__(self):
self.total_files_num = 0
self.total_dirs_num = 0
self.py_files_num = 0
self.py_lines_num = 0
def displaycountinfo(self):
print("--------------------------")
print("Total dirs:%d"%(self.total_dirs_num))
print("Total files:%d"%(self.total_files_num))
print("--------------------------")
print("Python files:%d"%(self.py_files_num))
print("Python lines:%d"%(self.py_lines_num))
print("--------------------------")
def countfilelines(self, path):
try:
with open(path,'r',encoding='utf8') as f:
return len(f.readlines())
except Exception as e:
print(e)
print(path)
return 0
def countdir(self, path):
self.total_dirs_num += 1
def countfile(self, path):
self.total_files_num += 1
ext_name = os.path.splitext(path)[1]
low_ext_name = ext_name.lower()
if low_ext_name == '.py':
self.py_files_num += 1
self.py_lines_num += self.countfilelines(path)
def countcode(self, top):
for root, dirs, files in os.walk(top,topdown=False):
for name in files:
self.countfile(os.path.join(root,name))
for name in dirs:
self.countdir(os.path.join(root,name))
def main():
mcc = MyCodeCount()
mcc.countcode("D:/Work/python")
mcc.displaycountinfo()
if __name__ == '__main__':
main()
运行结果:
--------------------------
Total dirs:0
Total files:1
--------------------------
Python files:1
Python lines:48
--------------------------
稍作修改也可以用于统计其他类型文件。