File size: 3,393 Bytes
3233c37
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
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'])