li916811602 发表于 2023-7-10 10:54

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

就是一个提取重复值的工具,如果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)
                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

            # 添加数据来源列和对应行数列
            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_sort_name = df.columns
    except IndexError:
      raise ValueError('列号不合法')# 列号不合法

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

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

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


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


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

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

col_keep = int(input("&#128049;请输入依据哪列进行查重并排序:"))
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环境下运行,谁能打包出来单个体积比较小的文件,可以在楼下放出来,谢谢拉。

Hmily 发表于 2023-7-10 11:51

用GPT写的还叫原创?

当初遇你时 发表于 2023-7-11 23:40

https://pla.lanzout.com/b0193rr2f
密码:86ik

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

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吧
页: [1] 2 3
查看完整版本: 用GPT写的小工具,将多个表格或多个sheet文件中的重复数据提取出来。