I am writing a code where I want the user to provide the location of the file and it will run the checks which I have coded. Here I have hardcoded the excel path but I want it dynamic.
I was trying Tkinter to code and dynamically read but I am getting an error:
from tkinter import *
from tkinter.ttk import *
import pandas as pd
import csv
from tkinter.filedialog import askopenfile
root = Tk()
root.geometry('200x100')
def open_file():
file = askopenfile(mode ='r', filetypes =[('Python Files',
'*.csv')])
if file is not None:
content = file.read()
print(content)
btn = Button(root, text ='Open', command = lambda:open_file())
btn.pack(side = TOP, pady = 10)
prac = askopenfile(mode ='r', filetypes =[('Python Files',
'*.csv')])
content = prac.read()
content["latlong"] ='FALSE'
content.loc[(content["LONGITUDE"] >= 70.0000) &
(content["LONGITUDE"] <=
98.0000) & (content["LONGITUDE"] != 'nan') &
(content["LATITUDE"] !=
'nan'), ["latlong"]] = 'TRUE'
file.to_csv("C:/Users/patesari/Desktop/python
work/practice1.csv")
writer = content[content["latlong"]=='TRUE']
writer.to_csv('C:/Users/patesari/Desktop/python
work/newfile1.csv',
index=False)
writer = content[content["latlong"]=='TRUE']
writer.to_csv('C:/Users/patesari/Desktop/python
work/outputfiles/latlong1.csv', index=False)
mainloop()
#but this code is giving me an error:content["latlong"] ='FALSE' #TypeError: 'str' object does not support item assignment. This code is working fine for me but I have harcoded the path:
def latlong_func():
data = pd.read_csv(r'C:/Users/patesari/Desktop/python
work/Gap1`.csv')
df = pd.DataFrame(data,columns=['SUPPLIER_ID','ACTION'])
data["latlong"] ='FALSE'
data.loc[(data["LONGITUDE"] >= 70.0000) & (data["LONGITUDE"]
<= 98.0000)&
(data["LONGITUDE"] != 'nan') & (data["LATITUDE"] != 'nan'),
["latlong"]]
= 'TRUE'
data.to_csv("C:/Users/patesari/Desktop/python
work/practice1.csv")
writer = data[data["latlong"]=='TRUE']
writer.to_csv('C:/Users/patesari/Desktop/python
work/newfile1.csv',
index=False)
writer = data[data["latlong"]=='TRUE']
writer.to_csv('C:/Users/patesari/Desktop/python
work/outputfiles/latlong1.csv', index=False)
what needs to be corrected if I am using tkinter. and what piece of code i should apply if not using tkinter
You should use askopenfilename
to get filename instead opened file object. Filename you can use with pd.read_csv(filename)
instead of using prac.read()
So first I made function
def latlong_func(filename):
data = pd.read_csv(filename)
# rest
so it get filename and use it with pandas.
And later I made function
def get_filename():
filename = askopenfilename(filetypes =[('Python Files', '*.csv')])
if filename:
lbl['text'] = filename
latlong_func(filename)
else:
lbl['text'] = 'not selected'
to get filename and execute latlong_func(filename)
. It also display filename in Label
in window.
This function is assigned to button
btn = tk.Button(root, text='Open', command=get_filename)
Full code:
import tkinter as tk
import pandas as pd
from tkinter.filedialog import askopenfilename
def latlong_func(filename):
# filename instead of r'C:/Users/patesari/Desktop/python work/Gap1.csv'
data = pd.read_csv(filename)
#df = pd.DataFrame(data, columns=['SUPPLIER_ID','ACTION'])
data["latlong"] = 'FALSE'
data.loc[
(data["LONGITUDE"] >= 70.0000) & (data["LONGITUDE"] <= 98.0000) &
(data["LONGITUDE"] != 'nan') & (data["LATITUDE"] != 'nan'),
["latlong"]
] = 'TRUE'
data.to_csv("C:/Users/patesari/Desktop/python work/practice1.csv")
writer = data[data["latlong"]=='TRUE']
writer.to_csv('C:/Users/patesari/Desktop/python work/newfile1.csv', index=False)
writer.to_csv('C:/Users/patesari/Desktop/python work/outputfiles/latlong1.csv', index=False)
def get_filename():
filename = askopenfilename(filetypes =[('Python Files', '*.csv')])
if filename:
lbl['text'] = filename # display filename in Label
latlong_func(filename)
else:
lbl['text'] = 'not selected'
# --- main ---
root = tk.Tk()
root.geometry('200x100')
lbl = tk.Label(root, text='Select filename')
lbl.pack(side='top', pady=10)
btn = tk.Button(root, text='Open', command=get_filename)
btn.pack(side='top', pady=10)
root.mainloop()
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.