【发布时间】:2021-06-30 21:29:50
【问题描述】:
下面是我打开目录中每个文件并查找类数、函数数、字符数和行数的代码。当我打印输出时字典值加起来,我该如何避免这种情况?
import os
class FileAnalyzer:
def __init__(self, directory: str) -> None:
self.directory: str = directory # NOT mandatory!
self.files_summary: Dict[str, Dict[str, int]] = dict()
self.cnt=0
self.c=0
self.cc=0
self.ct=0
self.analyze_files() # summerize the python files data
def analyze_files(self) -> None:
for filename in os.listdir(self.directory):
if filename.endswith(".py"):
with open(os.path.join(self.directory, filename), 'r') as f:
for line in f:
self.c+=1
line = line.lstrip()
if line.startswith("class "):
self.cnt+=1
if line.startswith("def "):
self.ct+=1
# Move to the start of file
for i in line:
if not line.startswith(" "):
self.cc+=1
self.files_summary[filename] = {"class":self.cnt,"function":self.ct,"line":self.c,"char":self.cc}
for k,v in self.files_summary.items():
print (k,v)
以下是我正在使用的两个输入文件:
file1.py:
definitely not function
This is def not a function def
file2.py:
"""
This file has:
- 2 classes
- 4 functions
- 25 lines
- 270 characters
"""
def func1():
pass
def func2():
pass
class Foo:
def __init__(self):
pass
class Bar:
def __init__(self):
pass
if __name__ == "__main__":
main()
我得到的输出是:
file1.py {'class': 0, 'function': 0, 'line': 3, 'char': 56}
file1.py {'class': 0, 'function': 0, 'line': 3, 'char': 56}
file2.py {'class': 2, 'function': 4, 'line': 28, 'char': 275}
预期输出:
file1.py {'class': 0, 'function': 0, 'line': 3, 'char': 56}
file2.py {'class': 2, 'function': 4, 'line': 25, 'char': 219}
我得到了 file1 的重复,并且在循环第二个文件时添加了计数。
【问题讨论】:
-
您可以在这里使用
ast模块让生活更轻松、更强大
标签: python-3.x file class dictionary self