代码如下:
import os
class FileCount(object):
def __init__(self,
root_path: str):
self.root_path = root_path
self._count = None
self._file_count = None
self.children = []
def get_count(self):
if self._count is None:
self._count = 0
self._file_count = 0
for child_name in os.listdir(self.root_path):
child_path = os.path.join(self.root_path, child_name)
if os.path.isdir(child_path):
child = FileCount(child_path)
self.children.append(child)
self._count += child.get_count()
else:
self._count += 1
self._file_count += 1
return self._count
def get_file_count(self):
if self._file_count is None:
self.get_count()
return self._file_count
def print_count(self,
indent: int = 0):
count_prefix = ''
for i in range(indent - 1):
count_prefix += '│\t'
if indent > 0:
count_prefix += '├──\t'
print(count_prefix + os.path.basename(self.root_path), '---', self.get_count())
for child in self.children:
child.print_count(indent + 1)
child_count_prefix = ''
for i in range(indent):
child_count_prefix += '│\t'
child_count_prefix += '└──\t'
print(child_count_prefix + 'files', self.get_file_count())
if __name__ == '__main__':
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-p', '--root_path', type=str, default='./', help='Root path.')
args = parser.parse_args()
count = FileCount(args.root_path)
count.print_count()
根目录通过命令行参数设置,例如
python print_file_sum.py -p D:\Temp\test_folder
打印出来的效果如下:
test_folder --- 6
├── folder_1 --- 2
│ ├── folder_1 --- 1
│ │ └── files 1
│ └── files 1
├── folder_2 --- 2
│ └── files 2
└── files 2
每一行的数字代表该级目录下的文件总数(包括子目录),下面还会给出每个子目录的统计情况,以及非目录文件数量。