使用要求:
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()
在这里插入代码片