En Python, convertir archivos de texto TXT a CSV es una necesidad común para análisis de datos, generación de informes o intercambio de datos entre aplicacoines. Los archivos TXT almacenan texto plano no estructurado, mientras que CSV organiza la información en filas y columnas para facilitar su procesamiento. Este tutorial demuestra cómo realizar esta conversión usando la biblioteca Spire.XLS para Python.
Conceptos Básicos de CSV
Los archivos CSV (Valores Separados por Comas) almacenan datos tabulares en texto plano. Cada línea representa un registro, donde los valores se separan mediante delimitadores como comas o tabuladores. Sus ventajas incluyen:
- Compatibilidad universal: Legibles en Excel, bases de datos y entornos como Python o R
- Simplicidad: Facilitan la importación, exportación y manipulación de datos
Instalación de Spire.XLS
Spire.XLS permite manipular archivos Excel y CSV sin dependencias externas. Instálelo mediante:
pip install Spire.XLS
Conversión Individual de TXT a CSV
Pasos para transformar un archivo:
- Leer el contenido del TXT
- Dividir los datos usando un delimitador
- Escribir la estructura tabular en CSV
from spire.xls import *
with open("datos.txt", "r") as archivo:
lineas = archivo.readlines()
datos_procesados = [linea.strip().split() for linea in lineas]
libro = Workbook()
hoja = libro.Worksheets[0]
for idx_fila, fila in enumerate(datos_procesados):
for idx_col, valor in enumerate(fila):
hoja.Range[idx_fila + 1, idx_col + 1].Value = valor
hoja.SaveToFile("salida.csv", ",", Encoding.get_UTF8())
libro.Dispose()
Conversión Masiva de Archivos
import os
from spire.xls import *
def convertir_txt_csv(entrada, salida):
with open(entrada, "r") as f:
lineas = f.readlines()
datos = [linea.strip().split() for linea in lineas if linea.strip()]
libro = Workbook()
hoja = libro.Worksheets[0]
for idx_f, fila in enumerate(datos):
for idx_c, valor in enumerate(fila):
hoja.Range[idx_f + 1, idx_c + 1].Value = valor
hoja.SaveToFile(salida, ",", Encoding.get_UTF8())
libro.Dispose()
carpeta_entrada = "txts"
carpeta_salida = "csvs"
os.makedirs(carpeta_salida, exist_ok=True)
for archivo in os.listdir(carpeta_entrada):
if archivo.endswith(".txt"):
ruta_entrada = os.path.join(carpeta_entrada, archivo)
nombre_salida = os.path.splitext(archivo)[0] + ".csv"
ruta_salida = os.path.join(carpeta_salida, nombre_salida)
convertir_txt_csv(ruta_entrada, ruta_salida)
Técnicas Avanzadas
1. Manejo de Delimitadores
# Tabuladores
datos = [linea.strip().split('\t') for linea in lineas]
# Comas
datos = [linea.strip().split(',') for linea in lineas]
# Personalizado (ej: pipe)
datos = [linea.strip().split('|') for linea in lineas]
2. Control de Errores
try:
# Operaciones de conversión
except Exception as error:
print(f"Error detectado: {error}")
3. Eliminación de Líneas Vacías
datos_validos = [linea.strip().split() for linea in lineas if linea.strip()]
Preguntas Frecuentes
¿Requiere Microsoft Excel instalado?
No. Spire.XLS funciona independientemente de Excel.
¿Cómo gestionar archivso con columnas inconsistentes?
Valide los datos durante el procesamiento y omita líneas vacías.
¿Se pueden procesar delimitadores personalizados?
Sí. Especifique el carácter en el método split() durante la división de datos.