import os
import re
import openpyxl
from openpyxl import Workbook
from typing import List, Dict
# Java 파일 검색
def find_java_files(project_folder: str) -> List[str]:
java_files = []
for root, dirs, files in os.walk(project_folder):
for file in files:
if file.endswith('.java'):
java_files.append(os.path.join(root, file))
return java_files
# Java 파일 분석
def parse_java_file(java_file_path: str) -> Dict:
with open(java_file_path, 'r', encoding='utf-8') as file:
content = file.read()
# Spring Service 이름 찾기
services = re.findall(r'@Service\s+public\s+class\s+(\w+)', content)
# 함수 이름 추출
functions = re.findall(r'(public|private|protected|static|\s)+[\w<>[\]]+\s+(\w+)\s*\([^)]*\)\s*\{', content)
# 문자열 추출
strings = re.findall(r'".+?"', content)
# 테이블 이름 추출
table_names = [s.strip('"') for s in strings if re.match(r'^[a-zA-Z0-9_]+$', s.strip('"'))]
return {
"services": services,
"functions": [func[1] for func in functions],
"tables": table_names,
}
# 엑셀 파일 생성
def write_to_excel(data: List[Dict], output_file: str):
workbook = Workbook()
sheet = workbook.active
sheet.title = "Java Analysis"
# 엑셀 헤더 추가
sheet.append(["FOLDER", "JAVA", "SERVICE", "FUNCTION", "TABLE"])
# 데이터 행 추가
for row in data:
sheet.append([row["FOLDER"], row["JAVA"], row["SERVICE"], row["FUNCTION"], row["TABLE"]])
# 엑셀 저장
workbook.save(output_file)
# 프로젝트 폴더 분석
def analyze_project_folder(project_folder: str, output_file: str):
java_files = find_java_files(project_folder)
data = []
for java_file in java_files:
folder = os.path.dirname(java_file)
java_name = os.path.basename(java_file)
parsed_data = parse_java_file(java_file)
# 각 Service, Function, Table에 대해 엑셀 행 생성
for service in parsed_data["services"]:
for function in parsed_data["functions"]:
for table in parsed_data["tables"]:
data.append({
"FOLDER": folder,
"JAVA": java_name,
"SERVICE": service,
"FUNCTION": function,
"TABLE": table,
})
write_to_excel(data, output_file)
# 실행
if __name__ == "__main__":
project_folder = "path/to/eclipse/project/src" # 분석할 프로젝트 폴더 경로
output_file = "java_analysis.xlsx" # 저장할 엑셀 파일 이름
analyze_project_folder(project_folder, output_file)
print(f"Analysis complete. Results saved to {output_file}.")
'정리 > Language' 카테고리의 다른 글
Java로 구분자 기준으로 여러행 나누기 (0) | 2024.10.26 |
---|---|
[Python] 코드 블럭, 괄호 표기, 괄호 힌트 (Code Block, Bracket Notation) (0) | 2023.11.08 |
비전공자가 본 "c 프로그래밍" 저자 윤성우 후기 (1) | 2015.11.06 |