指定文档批量归集小工具V1.0

目录

1、需求背景

2、需求说明

3、设计思路

4、实现过程

首先去完成思路3.1的逻辑

接下来进行3.2逻辑的处理了

然后进行3.3逻辑的实现

最后实现3.4逻辑

测试

完整代码



1、需求背景

在工作中,经常会遇到在文件夹里面找一些文件的情况,有时候需要找很多层的目录或者文件比较多,需要都找出来(比如在测试文件下的某个项目里面找到所有的world文档),于是想着自己做一个小工具来完成这样操作。

2、需求说明

一个目录A下面有多层目录,要求在目录A中提取出该目录下所以目录中的指定文件,提取后,需要拷贝到指定的文件夹中,然后发现重名再修改,并且发现重名文件后自动修改名称为XXX(1)

 

3、设计思路

3.1 读取文件夹,将符合条件的文档位置(名称)取出来存放在列表里面

3.2 处理列表,将列表信息内的文件名提取出来

3.3 检查重复的文件名,并给与重复的文件名重命名

3.4 将3.1查找出来的文件拷贝并按照重命名后的名称到新的文件夹下面

 

4、实现过程

首先去完成思路3.1的逻辑

def check_if_dir(filepath):
    temp_list = os.listdir(filepath)
    # print(temp_list)   #文件夹名称(仅名字)集合
    for temp_list_each in temp_list:
        pathName = filepath + '/' + temp_list_each
        if os.path.isfile(pathName):
            if os.path.splitext(pathName)[-1] == '.txt':
                path_read.append(pathName)
            else:
                continue
        else:
            check_if_dir(pathName)

接下来进行3.2逻辑的处理了

 

b = []  #文件名的列表(包含后缀)
c = []    #文件名列表(不包含后缀)
for i in path_read:
    list_v =re.findall('.+/(.*)$', i)   #提取/后面的信息
    b.append(list_v[0])

for i in b:
    list_v1 = re.findall('(.*?).txt', i)   #提取‘.txt’前面的信息 
    c.append(list_v1[0])

然后进行3.3逻辑的实现

def rename_duplicate(list):
    new_list=[v + str(list[:i].count(v) + 1) if list.count(v) > 1 else v for i, v in enumerate(list)]
    return new_list

renamed_list=rename_duplicate(c)

# 将截取并重命名的字符串加上后缀名
New_r_l = []    #新的加完后缀名的列表
for i in renamed_list:
    r_l = i+'.txt'
    New_r_l.append(r_l)

 

最后实现3.4逻辑

s=0    # 记录新的列表下标
for i in path_read:
    ads = New_path+New_r_l[s]
    shutil.copy(i, ads)
    print(i+'拷贝成功...')
    s += 1
    

 

以上便实现了这个小工具的功能,能力有限,做的比较粗糙,欢迎给出中肯建议,后期也会不断完善。

 

测试

 

执行结果:

开始执行操作.......
D:\A/B/D/测试文本.txt拷贝成功...
D:\A/B/E/测试文本.txt拷贝成功...
D:\A/B/E/第三测试文本.txt拷贝成功...
D:\A/B/E/第二测试文本.txt拷贝成功...
D:\A/B/测试文本.txt拷贝成功...
D:\A/C/F/G/测试文本.txt拷贝成功...
D:\A/C/F/测试文本.txt拷贝成功...
D:\A/C/F/第三测试文本.txt拷贝成功...
D:\A/C/测试文本.txt拷贝成功...
D:\A/C/第三测试文本.txt拷贝成功...
D:\A/测试文本.txt拷贝成功...
D:\A/第三测试文本.txt拷贝成功...
D:\A/第二测试文本.txt拷贝成功...
执行成功,拷贝的文件已经存放在D:\testA/里面了

 

经过测试  目前已经满足基本需求,后续会继续不断完善

 

完整代码

import os,re,time
import shutil   #shutil模块提供了大量的文件的高级操作。
path = 'D:\A'     # 此处填写需要处理的文件夹路径
New_path = 'D:\\testA/'     # 此处填写获取的文件保存地址(拷贝到的指定的目录)!!!!注意格式!!!!
path_read=[]   # 所有指定文件的具体地址列表
#newname = []

print('开始执行操作.......')

'''
将所需要的文件位置信息以列表的形式保存下来
'''
def check_if_dir(filepath):
    temp_list = os.listdir(filepath)
    # print(temp_list)   #文件夹名称(仅名字)集合
    for temp_list_each in temp_list:
        pathName = filepath + '/' + temp_list_each
        if os.path.isfile(pathName):
            if os.path.splitext(pathName)[-1] == '.txt':
                path_read.append(pathName)
            else:
                continue
        else:
            check_if_dir(pathName)
check_if_dir(path)
# print(path_read)   #测试



b = []  #文件名的列表(包含后缀)
c=[]    #文件名列表(不包含后缀)
for i in path_read:
    list_v =re.findall('.+/(.*)$', i)
    b.append(list_v[0])

for i in b:
    # list_v1=re.findall('(^.+/).*?', i)
    # list_v1=re.findall('^.+\.',i)
    list_v1 = re.findall('(.*?).txt', i)
    c.append(list_v1[0])
# print(b)   #测试
# print(c)   #测试



def rename_duplicate(list, print_result=False):
    new_list=[v + str(list[:i].count(v) + 1) if list.count(v) > 1 else v for i, v in enumerate(list)]
    return new_list

renamed_list=rename_duplicate(c,True)

# 将截取并重命名的字符串加上后缀名
New_r_l = []    #新的加完后缀名的列表
for i in renamed_list:
    r_l = i+'.txt'
    New_r_l.append(r_l)



s=0    # 记录新的列表下标
for i in path_read:
    ads = New_path+New_r_l[s]
    shutil.copy(i, ads)
    print(i+'拷贝成功...')
    s += 1


print("执行成功,拷贝的文件已经存放在"+New_path+"里面了")

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值