Cree una GUI para convertir un archivo CSV en un archivo de Excel usando Python

Prerrequisitos: Python GUI – tkinter , Leer csv usando pandas

El archivo CSV es un archivo de valores separados por comas que usa una coma para separar los valores. Se utiliza básicamente para el intercambio de datos entre diferentes aplicaciones. En esto, las filas individuales están separadas por una nueva línea. Los campos de datos en cada fila están delimitados con una coma.

Módulos necesarios

  • Pandas: Python es un excelente lenguaje para realizar análisis de datos, principalmente debido al fantástico ecosistema de paquetes de Python centrados en datos. Para instalar este módulo, escriba el siguiente comando en la terminal.
    pip install pandas
  • pandastable: esta biblioteca proporciona un widget de tabla para Tkinter con funcionalidad de trazado y manipulación de datos. Para instalar este módulo, escriba el siguiente comando en la terminal
    pip install pandastable
  • tkintertable: esta biblioteca se utiliza para agregar tablas a una aplicación Tkinter. Para instalar esta biblioteca, escriba el siguiente comando en la terminal.
    pip install tkintertable

A continuación se muestra la implementación.

Archivo CSV de entrada:

gui-to-convert-csv-to-excel

import pandas as pd
from tkinter import *
from tkinter import filedialog
from tkinter import messagebox as msg
from pandastable import Table
from tkintertable import TableCanvas
   
  
class csv_to_excel:
   
    def __init__(self, root):
   
        self.root = root
        self.file_name = ''
        self.f = Frame(self.root,
                       height = 200,
                       width = 300)
          
        # Place the frame on root window
        self.f.pack()
           
        # Creating label widgets
        self.message_label = Label(self.f,
                                   text = 'GeeksForGeeks',
                                   font = ('Arial', 19,'underline'),
                                   fg = 'Green')
        self.message_label2 = Label(self.f,
                                    text = 'Converter of CSV to Excel file',
                                    font = ('Arial', 14,'underline'),
                                    fg = 'Red')
   
        # Buttons
        self.convert_button = Button(self.f,
                                     text = 'Convert',
                                     font = ('Arial', 14),
                                     bg = 'Orange',
                                     fg = 'Black',
                                     command = self.convert_csv_to_xls)
        self.display_button = Button(self.f,
                                     text = 'Display',
                                     font = ('Arial', 14), 
                                     bg = 'Green',
                                     fg = 'Black',
                                     command = self.display_xls_file)
        self.exit_button = Button(self.f,
                                  text = 'Exit',
                                  font = ('Arial', 14),
                                  bg = 'Red',
                                  fg = 'Black', 
                                  command = root.destroy)
   
        # Placing the widgets using grid manager
        self.message_label.grid(row = 1, column = 1)
        self.message_label2.grid(row = 2, column = 1)
        self.convert_button.grid(row = 3, column = 0,
                                 padx = 0, pady = 15)
        self.display_button.grid(row = 3, column = 1, 
                                 padx = 10, pady = 15)
        self.exit_button.grid(row = 3, column = 2,
                              padx = 10, pady = 15)
   
    def convert_csv_to_xls(self):
        try:
            self.file_name = filedialog.askopenfilename(initialdir = '/Desktop',
                                                        title = 'Select a CSV file',
                                                        filetypes = (('csv file','*.csv'),
                                                                     ('csv file','*.csv')))
               
            df = pd.read_csv(self.file_name)
              
            # Next - Pandas DF to Excel file on disk
            if(len(df) == 0):      
                msg.showinfo('No Rows Selected', 'CSV has no rows')
            else:
                  
                # saves in the current directory
                with pd.ExcelWriter('GeeksForGeeks.xls') as writer:
                        df.to_excel(writer,'GFGSheet')
                        writer.save()
                        msg.showinfo('Excel file created', 'Excel File created')     
               
        except FileNotFoundError as e:
                msg.showerror('Error in opening file', e)
   
    def display_xls_file(self):
        try:
            self.file_name = filedialog.askopenfilename(initialdir = '/Desktop',
                                                        title = 'Select a excel file',
                                                        filetypes = (('excel file','*.xls'),
                                                                     ('excel file','*.xls')))
            df = pd.read_excel(self.file_name)
              
            if (len(df)== 0):
                msg.showinfo('No records', 'No records')
            else:
                pass
                
            # Now display the DF in 'Table' object
            # under'pandastable' module
            self.f2 = Frame(self.root, height=200, width=300) 
            self.f2.pack(fill=BOTH,expand=1)
            self.table = Table(self.f2, dataframe=df,read_only=True)
            self.table.show()
          
        except FileNotFoundError as e:
            print(e)
            msg.showerror('Error in opening file',e)
  
# Driver Code 
root = Tk()
root.title('GFG---Convert CSV to Excel File')
   
obj = csv_to_excel(root)
root.geometry('800x600')
root.mainloop()

Producción:

Publicación traducida automáticamente

Artículo escrito por SohelRaja y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *