吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3512|回复: 27
收起左侧

[Python 原创] 用GPT写的小工具,将多个表格或多个sheet文件中的重复数据提取出来。

[复制链接]
li916811602 发表于 2023-7-10 10:54

就是一个提取重复值的工具,如果excel玩儿的溜,那应该完全用不到这个软件。
'♥ 使用方法:♥\n'
'❀、首先你需要输入一个文件夹,然后回车。\n'
'❀、输入你看到的文件名称前的序号,如果为多个文件,请用空格隔开多个序号。\n'
'❀、根据预览输入需要开始合并的行,以及需要查重的列。\n'
'❀、去桌面打开你新生成的文件吧,重复的数据都在里面了。\n'

import pandas as pd
import os
from datetime import datetime

# 用户序号选择待处理文件
def select_files_from_folder(folder_path):
    file_list = []

    # 遍历文件夹并获取所有文件名
    for root, dirs, files in os.walk(folder_path):
        for file in files:
            file_list.append(os.path.join(root, file))

    if len(file_list) == 0:
        print("文件夹中没有文件。")
        return []

    print("文件列表如下:")
    for i, file_path in enumerate(file_list):
        print(f"{i + 1}. {file_path}")

    file_paths = []
    selection = input("请选择需要合并去重的文件(以空格分隔序号,全选请输入'0',直接回车表示选择结束):")
    indices = selection.split()

    if "0" in indices:
        file_paths = file_list.copy()  # 全选
    else:
        for index_str in indices:
            try:
                index = int(index_str.strip()) - 1
                if 0 <= index < len(file_list):
                    file_paths.append(file_list[index])
                else:
                    print(f"无效的序号:{index_str},忽略该序号。")
            except ValueError:
                print(f"无效的序号:{index_str},忽略该序号。")

    if len(file_paths) == 0:
        print("未选择任何文件。")

    return file_paths

# 打印前6行以方便下方的操作
def print_preview(path):
    df = pd.read_excel(path)
    df.index = df.index + 1
    print(df.iloc[:6, :6].to_string(index=True))

# 合并文件
def merge_files(file_list, header_rows):
    # 创建空的 DataFrame
    merged_data = pd.DataFrame()

    # 遍历每个文件
    for file_name in file_list:
        # 读取文件中的所有 sheet
        sheets = pd.read_excel(file_name, sheet_name=None)

        # 遍历每个 sheet
        for sheet_name, df in sheets.items():
            # 跳过抬头部分
            data = df.iloc[header_rows -1:]

            # 添加数据来源列和对应行数列
            data.insert(0, '文件名', file_name)
            data.insert(1, 'Sheet名', sheet_name)
            data.insert(2, '行数', range(header_rows + 1, header_rows + len(data) + 1))

            # 合并到总的 DataFrame 中
            merged_data = merged_data._append(data)
    print(merged_data)
    return merged_data

# 提取重复值
def process_data(df, col_keep, col_sort):
    # 检查 df 是否为 DataFrame 类型
    if not isinstance(df, pd.DataFrame):
        raise ValueError('输入数据必须为DataFrame')  # 输入数据必须为 DataFrame

    try:
        # 根据提供的索引获取列名
        col_keep_name = df.columns[col_keep + 2]
        col_sort_name = df.columns[col_sort + 2]
    except IndexError:
        raise ValueError('列号不合法')  # 列号不合法

    # 选择在 col_keep_name 列中具有重复值的行(保留全部重复项)
    deduped = df[df.duplicated(subset=[col_keep_name], keep=False)]

    # 根据 col_keep_name 和 col_sort_name 列对 deduped DataFrame 进行排序
    sorted_df = deduped.sort_values(by=[col_keep_name, col_sort_name])

    return sorted_df

# 将重复值写入表格并存到桌面
def save_duplicates_to_excel(sorted_df):
    # 获取当前用户的桌面路径
    desktop_path = os.path.join(os.path.expanduser("~"), 'Desktop')

    # 构建文件名(重复数据+当前具体时间)
    current_time = datetime.now().strftime("%Y%m%d%H%M%S")
    file_name = f"重复数据_{current_time}.xlsx"

    # 构建完整的文件路径
    file_path = os.path.join(desktop_path, file_name)

    # 将DataFrame保存为Excel文件
    sorted_df.to_excel(file_path, index=False)
    return file_path

# 写给她的话。在前面的话
print('🍬 工作虽苦,可你有我呀🍬!\n'
      '\n'
      '♥ 使用方法:♥\n'
      '❀、首先你需要输入一个文件夹,然后回车。\n'
      '❀、输入你看到的文件名称前的序号,如果为多个文件,请用空格隔开多个序号。\n'
      '❀、根据预览输入需要开始合并的行,以及需要查重的列。\n'
      '❀、去桌面打开你新生成的文件吧,重复的数据都在里面了。\n'
      '                                                                    🍬\n'
      '🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼🌼')

# 定义需要合并的文件列表
folder_path = input("🐱请输入文件夹路径:")
file_paths = select_files_from_folder(folder_path)
print("已选择以下文件进行合并去重:")
for file_path in file_paths:
     print(file_path)

# 打印第一个文件的前六行进行预览
print("预览文件前6行,方便您的选择:")
print_preview(file_paths[0])

# 询问用户输入表格的标题行数
header_rows = int(input("🐱请输入从哪行开始合并:"))

col_keep = int(input("🐱请输入依据哪列进行查重并排序:"))
col_sort = col_keep

# 调用函数进行合并
merged_data = merge_files(file_paths, header_rows)
df = pd.DataFrame(merged_data)

# 提取重复值
sorted_df = process_data(df, col_keep, col_sort)
print("以下为重复数据:")
print(sorted_df)

# 将重复数据文件存储到桌面
file_path = save_duplicates_to_excel(sorted_df)
print("重复数据已保存至桌面,文件路径为:" + file_path)
input("按任意键退出")
     用gpt写的一个小工具,用到自取哦,不太会打包exe文件,而且我打包的应用无法在win7环境下运行,谁能打包出来单个体积比较小的文件,可以在楼下放出来,谢谢拉。

免费评分

参与人数 9吾爱币 +6 热心值 +7 收起 理由
piaopiao_123 + 1 我很赞同!
dream00 + 1 热心回复!
cnlyli + 1 谢谢@Thanks!
shhsshsh + 1 我很赞同!
timeni + 1 + 1 用心讨论,共获提升!
Tobey + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
boy666 + 1 + 1 舔狗一无所有
小米粉 + 1 亲 可以看下这个 excel处理 https://chatexcel.com/
sutramusic + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Hmily 发表于 2023-7-10 11:51
用GPT写的还叫原创?

免费评分

参与人数 4热心值 +4 收起 理由
fun054 + 1 我很赞同!
skymilong + 1 你就说人家注释是不是得自己写吧 (逃
ytw6176 + 1 我很赞同!
数流年 + 1 我很赞同!

查看全部评分

当初遇你时 发表于 2023-7-11 23:40
https://pla.lanzout.com/b0193rr2f
密码:86ik

帮你打包好了,一共三个,体积更小。同时修复了bug和优化。
https://i2.100024.xyz/2023/07/11/12oqtok.webp

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
murong007 + 1 + 1 我很赞同!
li916811602 + 1 + 1 谢谢@Thanks!

查看全部评分

awakora 发表于 2023-7-10 13:11
redfieldw 发表于 2023-7-10 12:45
果然还是python
 楼主| li916811602 发表于 2023-7-10 10:57
这里也求助各位大佬帮忙给打包个exe文件,以方便食用。
WSSHH 发表于 2023-7-10 12:01
excel的东西好久没见了
xwawa 发表于 2023-7-10 12:35
gpt的确厉害啊
xiaowuzainuli 发表于 2023-7-10 12:54

gpt的确厉害啊
JackLei 发表于 2023-7-10 13:43
用Excelvba的循环每个Excel文档,嵌套字典,字典自带查重,直接就可以出来了
se34218 发表于 2023-7-10 14:06
应该就是用Python处理Excel吧
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 19:49

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表