need to compare two csv files in pyhton

2019-08-30 22:14发布

I have two files in csv format and wants to compare the columns.i want the list to be present in other csv file

import tkinter as tk
import pandas as pd
from tkinter.filedialog import askopenfilename
def latlong_func(filename):
data = pd.read_csv(filename)
data["latlong"] = 'FALSE'
data.loc[(data["FAC_TYPE"] ==9500)|
(data["FAC_TYPE"] ==9501)|
(data["FAC_TYPE"] ==9502)|
(data["FAC_TYPE"] ==9503)|
(data["FAC_TYPE"] ==9504)|
(data["FAC_TYPE"] ==9506)|
(data["FAC_TYPE"] ==9507)|
(data["FAC_TYPE"] ==9508)|
(data["FAC_TYPE"] ==9509)|
(data["FAC_TYPE"] ==9510)|
(data["FAC_TYPE"] ==9511)|
(data["FAC_TYPE"] ==9514)|
(data["FAC_TYPE"] ==9515)|
(data["FAC_TYPE"] ==9516)|
(data["FAC_TYPE"] ==9517)|
(data["FAC_TYPE"] ==9520)|
(data["FAC_TYPE"] ==9521)|
(data["FAC_TYPE"] ==9522)|
(data["FAC_TYPE"] ==9527)|
(data["FAC_TYPE"] ==9529)|
(data["FAC_TYPE"] ==9529)|
(data["FAC_TYPE"] ==9531)|
(data["FAC_TYPE"] ==9536)|
(data["FAC_TYPE"] ==9529)|
(data["FAC_TYPE"] ==9529)|
(data["FAC_TYPE"] ==9529)|
(data["FAC_TYPE"] ==9540)|
(data["FAC_TYPE"] ==9542)|
(data["FAC_TYPE"] ==9544)|
(data["FAC_TYPE"] ==9545)|
(data["FAC_TYPE"] ==9546)|
(data["FAC_TYPE"] ==9547)|
(data["FAC_TYPE"] ==9548)|
(data["FAC_TYPE"] ==9549)|
(data["FAC_TYPE"] ==9550)|
(data["FAC_TYPE"] ==9551)|
(data["FAC_TYPE"] ==9552)|
(data["FAC_TYPE"] ==9553)|
(data["FAC_TYPE"] ==9554)|
(data["FAC_TYPE"] ==9555)|
(data["FAC_TYPE"] ==9556)|
(data["FAC_TYPE"] ==9557)|
(data["FAC_TYPE"] ==9558)|
(data["FAC_TYPE"] ==9559)|
(data["FAC_TYPE"]==9561)|
(data["FAC_TYPE"]==9562)|
(data["FAC_TYPE"] ==9563)|
(data["FAC_TYPE"] ==9564)|
(data["FAC_TYPE"] ==9566)|
(data["FAC_TYPE"] ==9513)|
(data["FAC_TYPE"] ==9569)|
(data["FAC_TYPE"] ==9572)|
(data["FAC_TYPE"] ==9574)|
(data["FAC_TYPE"] ==9575)|
(data["FAC_TYPE"] ==9576)|
(data["FAC_TYPE"] ==9577)|
(data["FAC_TYPE"] ==9578)|
(data["FAC_TYPE"] ==9580)|
(data["FAC_TYPE"] ==9581)|
(data["FAC_TYPE"] ==9584)|
(data["FAC_TYPE"] ==9585)|
(data["FAC_TYPE"] ==9586)|
(data["FAC_TYPE"] ==9990)|
(data["FAC_TYPE"] ==9589), ["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():

filename0 = askopenfilename(filetypes =[('Python Files', '*.csv')])
filename1 = askopenfilename(filetypes =[('Python Files', '*.csv')])
if filename:
    lbl['text'] = filename
    latlong_func(filename)
else:
    lbl['text'] = 'not selected'
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()

In above i take file dynamically but I have hard coded the "or" ones.I want to compare it with 2nd csv file where the list is present.not the hard coded one. how can we store the list in csv in particular path and then compare that file

标签: python excel
1条回答
不美不萌又怎样
2楼-- · 2019-08-30 22:47

I don't know what you try to do with data so I keep empty work_with_data(data1, data2) but this code shows how to get two filenames, use read_csv() two times and finally run function work_with_data(data1, data2)

It also use two Labels to display two filenames.

import tkinter as tk
import pandas as pd
from tkinter.filedialog import askopenfilename

# --- functions ---

def work_with_data(data1, data2):

    print(data1.head())
    print(data2.head())

    # ... here you can works with data1, data2 ...


def get_filenames():
    # default values before reading data

    data1 = None
    data2 = None

    # first filename and data1

    filename1 = askopenfilename(filetypes =[('CSV files', '*.csv')])

    if filename1:
        lbl1['text'] = filename1
        data1 = pd.read_csv(filename1)
    else:
        lbl1['text'] = 'Filename 1 not selected'

    # second filename and data2

    filename2 = askopenfilename(filetypes =[('CSV files', '*.csv')])

    if filename2:
        lbl2['text'] = filename2
        data2 = pd.read_csv(filename2)
    else:
        lbl2['text'] = 'Filename 2 not selected'

    # start working with data

    if data1 is not None and data2 is not None:
       work_with_data(data1, data2)

# --- main ---

root = tk.Tk()
#root.geometry('200x200')

lbl1 = tk.Label(root, text='Select filename 1')
lbl1.pack(side='top', pady=10)

lbl2 = tk.Label(root, text='Select filename 2')
lbl2.pack(side='top', pady=10)

btn = tk.Button(root, text='Open', command=get_filenames)
btn.pack(side='top', pady=10)

root.mainloop()

EDIT: I changed little code so you can use pandas or csv.reader in work_with_data

import tkinter as tk
from tkinter.filedialog import askopenfilename
import pandas as pd

# --- functions ---

def work_with_data(filename1, filename2):

    # --- use pandas ---

    data1 = pd.read_csv(filename1)
    data2 = pd.read_csv(filename2)

    # ... here you can works with data1, data2 ...

    # --- or csv.reader ---

    fp1 = open(filename1)
    reader1 = csv.reader(fp1)

    fp2 = open(filename2)
    reader2 = csv.reader(fp2)

    # ... here you can works with reader1, reader2 ...

    fp2.close()   
    fp1.close()   


def get_filenames():
    # default values before reading data

    filename1 = None
    filename2 = None

    # first filename

    filename1 = askopenfilename(filetypes =[('CSV files', '*.csv')])

    if filename1:
        lbl1['text'] = filename1
    else:
        lbl1['text'] = 'Filename 1 not selected'

    # second filename

    filename2 = askopenfilename(filetypes =[('CSV files', '*.csv')])

    if filename2:
        lbl2['text'] = filename2
    else:
        lbl2['text'] = 'Filename 2 not selected'

    # start working with data

    if filename1 and filename2:
        work_with_data(filename1, filename1)

# --- main ---

root = tk.Tk()
#root.geometry('200x200')

lbl1 = tk.Label(root, text='Select filename 1')
lbl1.pack(side='top', pady=10)

lbl2 = tk.Label(root, text='Select filename 2')
lbl2.pack(side='top', pady=10)

btn = tk.Button(root, text='Open', command=get_filenames)
btn.pack(side='top', pady=10)

root.mainloop()
查看更多
登录 后发表回答