import os from pathlib import Path from collections import defaultdict def normalize_path_for_filename(path): """Normaliza o caminho do diretório para usar no nome do arquivo""" normalized = path.replace(os.sep, '_').replace('/', '_').replace('\\', '_') normalized = normalized.replace(':', '').replace('.', '_') if normalized.startswith('_'): normalized = normalized[1:] if not normalized: normalized = 'raiz' return normalized def get_language_tag(extension): """Retorna a tag de linguagem para o bloco de código markdown""" mapping = { '.py': 'python', '.sql': 'sql', '.md': 'markdown', '.json': 'json' } return mapping.get(extension, '') def process_directory(root_dir='.', extensions=['.py', '.sql', '.md', '.json']): """ Processa todos os arquivos do diretório e subdiretórios, gerando um arquivo MD por pasta com os arquivos encontrados. """ # Dicionário para agrupar arquivos por diretório files_by_dir = defaultdict(list) # Itera por todos os arquivos for dirpath, dirnames, filenames in os.walk(root_dir): for filename in filenames: file_ext = os.path.splitext(filename)[1].lower() # Verifica se a extensão está na lista if file_ext in extensions: full_path = os.path.join(dirpath, filename) files_by_dir[dirpath].append((filename, full_path, file_ext)) # Gera um arquivo MD por diretório for directory, files in files_by_dir.items(): # Normaliza o nome do diretório para o arquivo normalized_dir = normalize_path_for_filename(directory) output_filename = f'cópia_código_{normalized_dir}.md' with open(output_filename, 'w', encoding='utf-8') as output_file: output_file.write(f'# Arquivos do diretório: {directory}\n\n') # Ordena arquivos por nome files.sort(key=lambda x: x[0]) for filename, full_path, file_ext in files: # Calcula o caminho relativo rel_path = os.path.relpath(full_path, root_dir) # Escreve o cabeçalho do arquivo output_file.write(f'### {rel_path}\n') # Lê o conteúdo do arquivo try: with open(full_path, 'r', encoding='utf-8') as f: content = f.read() # Escreve o bloco de código lang_tag = get_language_tag(file_ext) output_file.write(f'```{lang_tag}\n') output_file.write(content) if not content.endswith('\n'): output_file.write('\n') output_file.write('```\n') except Exception as e: output_file.write(f'```\n') output_file.write(f'Erro ao ler arquivo: {e}\n') output_file.write('```\n') output_file.write('---\n\n') print(f'✓ Criado: {output_filename} ({len(files)} arquivos)') print(f'\nTotal: {len(files_by_dir)} diretórios processados') return len(files_by_dir) # Exemplo de uso: # process_directory('.', ['.py', '.sql', '.md', '.json']) # # Ou especificando um diretório diferente: process_directory('.', ['.py', '.sql', '.md', '.json'])