合并文件夹中所有文件,并输出重复的条形码值

文章目录

        • 一、需求
        • 二、处理方式
        • 三、代码实现

一、需求

每天会生成一个记录文件(文件名按日期yyyyMMdd格式命名),记录文件中记录有条形码的内容,需要合并最近20次的数据,并提取出有重复的条形码。
也可以进行最近30天数据的合并,需要修改次数判断为日期判断即可。

二、处理方式

1、遍历存放记录文件的文件夹,并将获取的文件名进行排序;
2、根据条件过滤不需要的文件,然后将所有读取的文件使用pandas 的concat函数进行合并;
3、使用duplicated函数判断是否有重复;
4、输出有重复的条形码值。

三、代码实现

import datetime
import os
import shutil
import pandas as pd

current_date = datetime.date.today()
ls = []

files = os.listdir("记录文件")
files = sorted(files, reverse=True)  # 对文件进行逆序排序

count = 0
for file in files:
    if '模板' not in file and file.endswith('.xlsx'):  # 只选择xlsx后缀的文件,并剔除文件名中有"模板"的文件
        file_path = os.path.join("记录文件", file)
        df = pd.read_excel(file_path)
        ls.append(df)
        count += 1
    if count == 20:  # 选择最近的20个文件
        break

output = pd.concat(ls)
oupt_name = f'{datetime.date.today()}合并的数据.csv'
output.to_csv(oupt_name, encoding='gbk')

data = pd.read_csv(oupt_name, encoding='gbk')
data['是否重复'] = data['条码值'].duplicated(keep=False)
duplicate_barcodes = data[data['是否重复'] == True]

if len(duplicate_barcodes['是否重复'].tolist()) != 0:
    duplicate_barcodes.to_csv('有重码的文件.csv', encoding='gbk')

if not os.path.exists("合并后的文件"):
    os.makedirs("合并后的文件")
if not os.path.exists("有重码的文件"):
    os.makedirs("有重码的文件")
shutil.move(oupt_name, os.path.join("合并后的文件", oupt_name))
shutil.move('有重码的文件.csv', os.path.join("有重码的文件", '有重码的文件.csv'))

如果是最近30天的文件,合并文件的代码如下,判断是否重复的代码不变:

current_date = datetime.date.today() - datetime.timedelta(days=30)
date_string = current_date.strftime("%Y%m%d")
print("当前日期:", date_string)

ls = []
for file in os.scandir():
    if '模板' not in file.name:
        if file.name.endswith('xlsx'):
            file_date = datetime.datetime.strptime(file.name[:-5], "%Y%m%d").date()
            if file_date > current_date:
                df = pd.read_excel(file.name)
                ls.append(df)
output = pd.concat(ls)

你可能感兴趣的:(办公自动化,python,重复值,办公自动化)