Spaces:
Runtime error
Runtime error
| 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']) | |