- AdminCP
- #1
- MG Yaşı
- 2 Ay 21 Gün
- Katılım
- 2 Şub 2026
- Konular
- 224
- Mesajlar
- 368
- Tepkime puanı
- 67
- Puan
- 53
- Konum
- İstanbul
Python’un kendi kod analiz mekanizmasını kullanarak dosyaları inceler ve kullanılmayan importları satır numarasıyla birlikte raporlar.
Python:
import os
import ast
class ImportAnalyzer(ast.NodeVisitor):
def __init__(self):
self.imports = {}
self.used_names = set()
def visit_Import(self, node):
for alias in node.names:
name = alias.asname or alias.name.split('.')[0]
self.imports[name] = node.lineno
self.generic_visit(node)
def visit_ImportFrom(self, node):
if node.names[0].name == "*":
return
for alias in node.names:
name = alias.asname or alias.name
self.imports[name] = node.lineno
self.generic_visit(node)
def visit_Name(self, node):
self.used_names.add(node.id)
self.generic_visit(node)
def visit_Attribute(self, node):
if isinstance(node.value, ast.Name):
self.used_names.add(node.value.id)
self.generic_visit(node)
def safe_read(path):
for enc in ("utf-8", "cp1254", "latin-1"):
try:
with open(path, "r", encoding=enc) as f:
return f.read()
except UnicodeDecodeError:
continue
# En son çare
with open(path, "r", errors="ignore") as f:
return f.read()
def find_unused_imports(py_file):
try:
source = safe_read(py_file)
tree = ast.parse(source, filename=py_file)
except (SyntaxError, ValueError):
return None
analyzer = ImportAnalyzer()
analyzer.visit(tree)
return {
name: line
for name, line in analyzer.imports.items()
if name not in analyzer.used_names
}
def scan_folder(root_folder):
results = {}
for root, _, files in os.walk(root_folder):
for file in files:
if file.endswith(".py"):
path = os.path.join(root, file)
unused = find_unused_imports(path)
if unused:
results[path] = unused
return results
if __name__ == "__main__":
folder = input("Taranacak klasör yolu: ").strip()
report = scan_folder(folder)
if not report:
print("🎉 Gereksiz import bulunamadı.")
else:
print("\n🚨 GEREKSİZ IMPORTLAR:\n")
for file, imports in report.items():
print(f"📄 {file}")
for name, line in imports.items():
print(f" - {name} (satır {line})")
print()
Moderatör tarafında düzenlendi:
