Script en Python para convertir Excel a CSV separado por comas
Si necesitas convertir Excel a CSV, estás en el lugar correcto. En este post te enseño cómo pasar de Excel a CSV de manera eficiente, ya sea que necesites un archivo CSV delimitado por comas o por punto y coma. Aprenderás a convertir archivos XLSX a CSV y a manejar diferentes formatos de separación usando Python.
La función de exportación de Excel a CSV no separa por comas, sino con punto y coma, por eso he implementado esta solución.
- Tiempo de implementación: 5 min
- Nivel de dificultad: Fácil
Copia este script en Python
Copia este script en Python y guárdalo en un archivo con extensión .py, por ejemplo: convertiracsv.py
Te recomiendo guardarlo en la misma carpeta que tengas el archivo Excel a convertir, por comodidad básicamente.
# -------------------------------------------------------------
# Autor: Daniel Pajuelo
# Web: https://danielpajuelo.com
# Versión: 1.0
# -------------------------------------------------------------
import pandas as pd
import sys
import csv
def convert_excel_to_csv(excel_file):
# Leer el archivo Excel
data_frame = pd.read_excel(excel_file)
# Obtener el nombre base del archivo para el nuevo archivo CSV
csv_file = excel_file.replace(".xlsx", ".csv")
# Obtener los nombres de las columnas y los datos
column_names = data_frame.columns.tolist()
data = data_frame.values.tolist()
# Escribir manualmente los datos en un archivo CSV
with open(csv_file, mode='w', newline='', encoding='utf-8-sig') as file:
# Escribir los nombres de las columnas, cada uno entre comillas
file.write(','.join(['"{}"'.format(column) for column in column_names]) + '\n')
# Escribir los datos
writer = csv.writer(file)
writer.writerows(data)
if __name__ == "__main__":
if len(sys.argv) != 2:
print("Usage: python script.py <input-file.xlsx>")
sys.exit(1)
excel_file = sys.argv[1]
convert_excel_to_csv(excel_file)
Este script te permite convertir un archivo Excel a CSV de forma rápida y sencilla. Funciona con archivos XLSX y genera un CSV delimitado por comas, que es el formato más común y compatible con la mayoría de los sistemas.
Instala las siguientes librerías
Abrir el terminal o la línea de comandos:
En Windows, puedes hacer esto buscando «cmd» en la barra de búsqueda y seleccionando «Símbolo del sistema». En macOS o Linux, puedes abrir la terminal desde tus aplicaciones o el launcher.
Verificar la versión de Python y Pip:
Antes de instalar pandas, verifica que tienes una versión compatible de Python y Pip ejecutando los siguientes comandos:
python --version
pip --version
Instalar Pandas
Para instalar pandas, ejecuta el siguiente comando en tu terminal o línea de comandos:
pip install pandas
Instalar Openpyxl
También necesitarás instalar openpyxl para leer archivos de Excel. Puedes hacer esto con el siguiente comando:
pip install openpyxl
Ejecuta el conversor
Para ejecutar el script, guarda el código anterior en un archivo llamado script.py
y luego ejecútalo desde la línea de comandos con el nombre del archivo Excel como argumento. Por ejemplo:
python convertiracsv.py input-file.xlsx
Explicación del código
Si te interesa la programación y quieres entender cómo funciona este convertidor de Excel a CSV, o incluso modificarlo para añadir funcionalidades como convertir a CSV delimitado por punto y coma, aquí te explico el código:
import pandas as pd
import sys
import csv
Aquí, el script importa tres módulos o bibliotecas: pandas (un poderoso módulo para manipulación de datos), sys (para interactuar con el sistema, en este caso, para obtener argumentos de la línea de comandos), y csv (para trabajar con archivos CSV).
def convert_excel_to_csv(excel_file):
Esta línea define una nueva función llamada convert_excel_to_csv que toma un argumento: el nombre del archivo Excel que queremos convertir a CSV.
data_frame = pd.read_excel(excel_file)
Utilizando la función read_excel de pandas, el script lee el archivo Excel especificado y lo carga en un DataFrame, que es una estructura de datos tabular en pandas.
csv_file = excel_file.replace(".xlsx", ".csv")
Aquí, se está creando el nombre del archivo CSV simplemente reemplazando la extensión .xlsx en el nombre del archivo original con .csv.
column_names = data_frame.columns.tolist()
data = data_frame.values.tolist()
Estas dos líneas extraen los nombres de las columnas y los datos del DataFrame y los convierten en listas.
with open(csv_file, mode='w', newline='', encoding='utf-8-sig') as file:
Esta línea abre un nuevo archivo CSV para escritura. El argumento mode=’w’ indica que queremos escribir en el archivo, y encoding=’utf-8-sig’ asegura una correcta codificación de caracteres.
file.write(','.join(['"{}"'.format(column) for column in column_names]) + '\n')
Aquí, se está escribiendo la primera fila del archivo CSV, que son los nombres de las columnas, cada uno entre comillas. La función join une los nombres de las columnas con comas entre ellos, y file.write escribe esta cadena en el archivo CSV.
writer = csv.writer(file)
writer.writerows(data)
Estas líneas crean un objeto writer que puede escribir datos en un archivo CSV, y luego escriben todas las filas de datos en el archivo CSV.
if name == "main":
…
excel_file = sys.argv[1]
convert_excel_to_csv(excel_file)
Este bloque se ejecuta solo si el script se ejecuta directamente (en lugar de ser importado como un módulo en otro script). sys.argv[1] obtiene el primer argumento de la línea de comandos, que se supone que es el nombre del archivo Excel. Luego, el script llama a la función convert_excel_to_csv para convertir el archivo Excel a CSV.
Ventajas de convertir Excel a CSV
Convertir archivos de Excel a formato CSV tiene varias ventajas:
- Compatibilidad: Los archivos CSV son ampliamente compatibles y pueden abrirse en casi cualquier sistema.
- Tamaño reducido: Los CSV ocupan menos espacio que los archivos Excel.
- Facilidad de importación: Muchas bases de datos y sistemas prefieren la importación de archivos CSV.
- Flexibilidad: Puedes elegir entre CSV separado por comas o por punto y coma según tus necesidades.»