es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo nombrar automáticamente los archivos de Excel generados a partir de archivos csv con Python

Necesito convertir archivos csv en archivos Excel de manera automática. Estoy teniendo problemas para nombrar los archivos de Excel con el nombre del archivo csv correspondiente.
He guardado los archivos csv como ‘Trials1′, ‘Trials2′, Trilas3′, pero con el código que escribí en Python me da un error y me pide un archivo csv llamado ‘Trials4′. Luego, si renombro el archivo csv ‘Trials1′ como ‘Trials4′, el programa funciona y genera un archivo Excel llamado ‘Trials_1′.
¿Cómo puedo corregir mi código?

”’

import csv

import openpyxl as xl

import os, os.path

directory=r'C:\\Users\\PycharmProjects\\input\\'

folder=r'C:\\Users\\PycharmProjects\\output\\'

for csv_file in os.listdir(directory):

def csv_to_excel(csv_file, excel_file):

    csv_data=[]

    with open(os.path.join(directory, csv_file)) as file_obj:

        reader=csv.reader(file_obj)

        for row in reader:

            csv_data.append(row)

    workbook= xl.Workbook()

    sheet=workbook.active

    for row in csv_data:

        sheet.append(row)

        workbook.save(os.path.join(folder,excel_file))


if __name__=="__main__":

    m = sum(1 for f in os.listdir(directory) if os.path.isfile(os.path.join(directory, f)))
    
    new_name = "{}Prueba_{}.csv".format(directory, m + 1)
    
    k = sum(1 for file in os.listdir(folder) if os.path.isfile(os.path.join(folder, file)))
    
    new_name_e = "{}Prueba_{}.xlsx".format(folder, k + 1)
    
    csv_to_excel(new_name,new_name_e)

”’

Gracias.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para nombrar correctamente los archivos de Excel con el nombre correspondiente al archivo csv, se pueden realizar las siguientes modificaciones en el código:

    1. Dentro de la función csv_to_excel, en lugar de usar el argumento excel_file para nombrar el archivo de salida, se puede utilizar el argumento csv_file. Esto asegurará que el archivo de Excel tenga el mismo nombre que el archivo csv.
    2. En la parte principal del código, la variable new_name debe modificarse para incluir solo el nombre del archivo csv, sin la ruta del directorio. Esto se puede lograr utilizando os.path.basename(csv_file) en lugar de directory.

    El código modificado se vería así:

    import csv
    import openpyxl as xl
    import os, os.path
    
    directory=r'C:\\Users\\PycharmProjects\\input\\'
    folder=r'C:\\Users\\PycharmProjects\\output\\'
    
    def csv_to_excel(csv_file):
        csv_data=[]
    
        with open(os.path.join(directory, csv_file)) as file_obj:
            reader=csv.reader(file_obj)
            for row in reader:
                csv_data.append(row)
    
        workbook= xl.Workbook()
        sheet=workbook.active
    
        for row in csv_data:
            sheet.append(row)
    
        excel_file = os.path.splitext(csv_file)[0] + '.xlsx'
        workbook.save(os.path.join(folder,excel_file))
    
    if __name__=="__main__":
        for csv_file in os.listdir(directory):
            csv_to_excel(csv_file)
    

    Con estas modificaciones, el código debería poder convertir automáticamente todos los archivos csv en el directorio de entrada a archivos de Excel con el nombre correspondiente en el directorio de salida.

Comments are closed.