PARA.AI / copy_code.py
Carlex22's picture
Revert "ParaAIV3.1"
1f24745
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'])