Prerequisites: Python GUI – tkinter, Read csv using pandas
CSV file is a Comma Separated Value file that uses a comma to separate values. It is basically used for exchanging data between different applications. In this, individual rows are separated by a newline. Fields of data in each row are delimited with a comma.
Modules Needed
- Pandas: Python is a great language for doing data analysis, primarily because of the fantastic ecosystem of data-centric python packages. To install this module type the below command in the terminal.
pip install pandas
- pandastable: This library provides a table widget for Tkinter with plotting and data manipulation functionality. To install this module type the below command in the terminal
pip install pandastable
- tkintertable: This library is used for adding tables to a Tkinter application. To install this library type the below command in the terminal.
pip install tkintertable
Below is the implementation.
Input CSV File:
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() |
Output: