两个excel表格以个两列数据比对

使用要求:
1、两个excel文件比对的是以csv文件作为基础。
wps文件如何把xls与xlsx文件转为csv文件:
excel文件转为csv文件
2、比对是以csv文件的第一列为基础,把两个csv文件的第一列数据生成两个集合。
3、生成的第一个文件common.csv是两个文件共有数据
第二个文件A_Unique_elements.csv,是A文件特有数据
第三个文件B_Unique_elements.csv是B文件特有数据

"""
-*- coding: utf-8-*-
Author : {"闵强强"}
Time : 2024-1-26 8:34
Project : python_code
IDE : PyCharm 
File : A.py
清华源 : pip install -i https://pypi.tuna.tsinghua.edu.cn/simple dateutil
目标网站 :
项目打包 : pyinstaller --onefile A.py  
"""
import csv
import tkinter as tk
from tkinter import filedialog


def exit_app():
    "窗口退出函数"
    root.destroy()


def open_read_excel_file_A():
    "打开excel文件,并读取文件"
    global file_paths_A
    file_paths_A = filedialog.askopenfilename(filetypes=[("CSV Files", "*.csv")])
    if file_paths_A:
        print(file_paths_A)
        return file_paths_A
    else:
        # 输入的地址为空
        feedback_empty_file = tk.Button(root, text="输入的地址为空,点击退出程序", command=exit_app)
        feedback_empty_file.pack()


def open_read_excel_file_B():
    "打开excel文件,并读取文件"
    global file_paths_B
    file_paths_B = filedialog.askopenfilename(filetypes=[("CSV Files", "*.csv")])
    if file_paths_B:
        print(file_paths_B)
        return file_paths_B
    else:
        # 输入的地址为空
        feedback_empty_file = tk.Button(root, text="输入的地址为空,点击退出程序", command=exit_app)
        feedback_empty_file.pack()


# 获取文件的地址
def select_folder():
    # 定义一个全局变量
    global selected_folder
    # 它用于在图形用户界面(GUI)中显示一个文件夹选择对话框,让用户选择一个文件夹。这个函数的返回值是用户选择的文件夹的路径。
    folder_path = filedialog.askdirectory()
    selected_folder = folder_path
    folder_entry.delete(0, tk.END)
    folder_entry.insert(0, selected_folder)
    print(selected_folder)
    return selected_folder


def read_csv(csv_file_path):
    with open(csv_file_path, mode='r',  encoding='utf-8') as csv_file:
        csv_reader = csv.reader(csv_file)
        Job_numbers = set()
        for row in csv_reader:
            if row != []:
                Job_numbers.add(row[0])
            else:
                continue
    return Job_numbers


def open_csv_(csv_file_add):
    rows = []
    with open(csv_file_add, mode='r', encoding='utf-8') as csv_file:
        content = csv.reader(csv_file)
        for row in content:
            rows.append(row)
    return rows


def write_csv(save_files_csv, Difference_Job_numbers, csv_file_add):
    rows = open_csv_(csv_file_add=csv_file_add)
    for Difference_Job_number in Difference_Job_numbers:
        for row in rows:
            if row != []:
                if row[0] == Difference_Job_number:
                    print("excel行数据",row)
                    with open(save_files_csv, mode='a', encoding='utf-8', newline='') as csv_files:
                        dest_writer = csv.writer(csv_files)
                        dest_writer.writerow(row)
            else:
                continue

# 调用执行确定按钮
def get_folder_path():
    write_excel(selected_excel=selected_folder)


# 文件名写入excel函数
def write_excel(selected_excel):
    # 获取A表格内容
    A_data = read_csv(csv_file_path=file_paths_A)
    # 获取B表格内容
    B_data = read_csv(csv_file_path=file_paths_B)
    # A与B交集(相同部分)
    A_B_common = A_data.intersection(B_data)
    # A集合源中不包含B集合中元素的集合。
    A_difference = A_data.difference(B_data)
    # B集合源中不包含A集合中元素的集合。
    B_difference = B_data.difference(A_data)
    # 运行主循环
    write_csv(save_files_csv=selected_excel + "\\common.csv", Difference_Job_numbers=A_B_common,
              csv_file_add=file_paths_A)
    write_csv(save_files_csv=selected_excel + "\\A_Unique_elements.csv", Difference_Job_numbers=A_difference,
              csv_file_add=file_paths_A)
    write_csv(save_files_csv=selected_excel + "\\B_Unique_elements.csv", Difference_Job_numbers=B_difference,
              csv_file_add=file_paths_B)
    EDN = tk.Button(root, text="程序完成,退出窗口", command=exit_app)
    EDN.pack()


if __name__ == '__main__':
    # 创建主窗口
    root = tk.Tk()
    root.title("带按钮的窗口")
    root.geometry("500x500")
    # 打开excel文件
    open_button = tk.Button(root, text="打开A-excel表格", command=lambda: (open_read_excel_file_A()))
    open_button.pack()
    # 打开excel文件
    open_button = tk.Button(root, text="打开B-excel表格", command=lambda: (open_read_excel_file_B()))
    open_button.pack()
    folder_entry = tk.Entry(root, width=70)
    folder_entry.insert(0, "文件夹地址:")
    folder_entry.pack()
    folder_button = tk.Button(root, text="比对结果存放位置", command=select_folder)
    folder_button.pack()
    submit_button = tk.Button(root, text="确定", command=get_folder_path)
    submit_button.pack()
    root.mainloop()
在这里插入代码片
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值