Upload 2 files
Browse files- convert_excel_to_csv.py +77 -0
- rol_procedures_database.csv +0 -0
convert_excel_to_csv.py
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import pandas as pd
|
| 2 |
+
import os
|
| 3 |
+
import sys
|
| 4 |
+
import traceback
|
| 5 |
+
|
| 6 |
+
# --- ETAPA 1: DEFINIR CAMINHOS DINAMICAMENTE ---
|
| 7 |
+
try:
|
| 8 |
+
script_dir = os.path.dirname(os.path.abspath(__file__))
|
| 9 |
+
except NameError:
|
| 10 |
+
# Fallback para ambientes interativos
|
| 11 |
+
script_dir = os.getcwd()
|
| 12 |
+
|
| 13 |
+
excel_file_path = os.path.join(script_dir, 'TUSSxRolxSinônimosvs2.xlsx')
|
| 14 |
+
csv_file_path = os.path.join(script_dir, 'rol_procedures_database.csv')
|
| 15 |
+
|
| 16 |
+
print(f"Diretório de trabalho: {script_dir}")
|
| 17 |
+
print(f"Arquivo de entrada (Excel): {excel_file_path}")
|
| 18 |
+
print(f"Arquivo de saída (CSV): {csv_file_path}")
|
| 19 |
+
|
| 20 |
+
# --- ETAPA 2: VERIFICAR E PROCESSAR OS ARQUIVOS ---
|
| 21 |
+
if not os.path.exists(excel_file_path):
|
| 22 |
+
print(f"\nERRO: Arquivo de entrada não encontrado!")
|
| 23 |
+
print(
|
| 24 |
+
f"Por favor, certifique-se de que o arquivo '{os.path.basename(excel_file_path)}' está na mesma pasta que este script.")
|
| 25 |
+
sys.exit(1)
|
| 26 |
+
|
| 27 |
+
try:
|
| 28 |
+
print(f"\nLendo o arquivo Excel (forçando TODAS as colunas como texto)...")
|
| 29 |
+
df = pd.read_excel(excel_file_path, dtype=str)
|
| 30 |
+
|
| 31 |
+
print("Mapeando colunas e limpando dados...")
|
| 32 |
+
df_mapped = pd.DataFrame()
|
| 33 |
+
|
| 34 |
+
column_mapping = {
|
| 35 |
+
'Codigo_TUSS': 'Código',
|
| 36 |
+
'Descricao_TUSS': 'Terminologia de Procedimentos e Eventos em Saúde (Tab. 22.202503)',
|
| 37 |
+
'Correlacao_Rol': 'Correlação\n(Sim/Não)',
|
| 38 |
+
'Procedimento_Rol': 'PROCEDIMENTO',
|
| 39 |
+
'Resolucao_Normativa': 'Resolução\nNormativa (alteração)',
|
| 40 |
+
'Vigencia': 'VIGÊNCIA',
|
| 41 |
+
'OD': 'OD', 'AMB': 'AMB', 'HCO': 'HCO', 'HSO': 'HSO', 'PAC': 'PAC', 'DUT': 'DUT',
|
| 42 |
+
'SUBGRUPO': 'SUBGRUPO', 'GRUPO': 'GRUPO', 'CAPITULO': 'CAPÍTULO',
|
| 43 |
+
'Sinonimo_1': 'Sinônimo 1 (Popular/Explicativo)',
|
| 44 |
+
'Sinonimo_2': 'Sinônimo 2 (Abreviação/Técnico)',
|
| 45 |
+
'Sinonimo_3': 'Sinônimo 3 (Entre Tabelas AMB/CBHPM)',
|
| 46 |
+
'Sinonimo_4': 'Sinônimo 4 (Outros)',
|
| 47 |
+
'Semantico': 'Síntese semântica do procedimento'}
|
| 48 |
+
|
| 49 |
+
for new_col, old_col in column_mapping.items():
|
| 50 |
+
if old_col in df.columns:
|
| 51 |
+
# --- ALTERAÇÃO PRINCIPAL AQUI ---
|
| 52 |
+
# 1. Substituímos qualquer quebra de linha (\n ou \r) por um espaço.
|
| 53 |
+
# 2. Depois, limpamos os espaços em branco do início e do fim.
|
| 54 |
+
# Usamos uma expressão regular (regex) para pegar todas as variações de quebra de linha.
|
| 55 |
+
cleaned_series = df[old_col].str.replace(r'[\r\n]+', ' ', regex=True).str.strip()
|
| 56 |
+
df_mapped[new_col] = cleaned_series
|
| 57 |
+
# ------------------------------------
|
| 58 |
+
else:
|
| 59 |
+
print(f"AVISO: Coluna '{old_col}' não encontrada. A coluna '{new_col}' será criada vazia.")
|
| 60 |
+
df_mapped[new_col] = pd.Series(dtype='object')
|
| 61 |
+
|
| 62 |
+
# Preencher valores nulos (NaN) com uma string vazia para garantir consistência
|
| 63 |
+
df_mapped = df_mapped.fillna('')
|
| 64 |
+
|
| 65 |
+
print(f"\nSalvando o arquivo CSV mapeado e limpo...")
|
| 66 |
+
# Usando quoting=csv.QUOTE_MINIMAL pode ser uma boa prática, mas o padrão já é bom.
|
| 67 |
+
df_mapped.to_csv(csv_file_path, index=False, encoding='utf-8-sig')
|
| 68 |
+
|
| 69 |
+
print("\n--- Informações do arquivo CSV gerado ---")
|
| 70 |
+
print(f"Número de linhas: {len(df_mapped)}")
|
| 71 |
+
print(f"Número de colunas: {len(df_mapped.columns)}")
|
| 72 |
+
print(f"\nSUCESSO! Arquivo CSV salvo em: {csv_file_path}")
|
| 73 |
+
|
| 74 |
+
except Exception as e:
|
| 75 |
+
print(f"\nERRO CRÍTICO ao processar o arquivo Excel: {e}")
|
| 76 |
+
traceback.print_exc()
|
| 77 |
+
sys.exit(1)
|
rol_procedures_database.csv
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|