【python学习】从多个文件夹中识别文件名相同的文件,并重命名复制存储在新路径下

从多个文件夹中提取文件名相同的文件,并重命名存储在新路径下

在量化计算中,对多个结构进行计算后,会产生一系列的结果文件,其中每个结构的结果文件的名字均有相同的。比如,对五个结构进行xtb结构优化,优化后产生的结构文件名均为:xtbopt.xyz。接着想基于优化后的结构文件进行进一步计算。因此需要先将这个结构文件提取出来,并存储在新的文件夹下,方便后续处理。

逻辑图示意

在这里插入图片描述

代码思路设计

  1. 使用os.listdir()获取文件夹路径下的所有子文件夹名字列表
  2. 接着使用for循环,依次遍历每个文件夹及每个子文件夹下的所有文件
  3. 基于if条件结构,筛选文件名为’xtbopt.xyz’的文件
  4. 建立存储指定文件的新路径,并建立跟子文件夹名字一样的子文件夹
  5. 获取指定文件的所在路径,使用shutil.copy()对文件进行重命名与复制到新路径

代码实现

import os
import shutil
def bulid_files(save_dir,file_number):
    '''
    该函数实现建立一系列空文件夹
    save_dir:存放一系列文件夹的路径
    '''
    for i in range(0,file_number,1):
        save_path=os.path.join(save_dir,'POSCAR'+str(i))
        if not os.path.exists(save_path):
            os.makedirs(save_path)
def fileExtractAndRename(folder_path,save_dir,folder_name):
    '''
    从文件夹中提取某份文件,存入进新文件夹并重命名
    folder_path:文件夹所在路径
    save_dir:存储提取文件所在路径
    folder_name:文件夹名
    file_number:子文件夹数量
    思路设计:
    遍历文件夹下所有子文件夹,找到规定文件名的文件
    将该文件复制到新路径,并重新命名
    '''
    new_folder=folder_name+'_xtb' #定义好提取文件存储到新的文件夹的名字
    save_path=os.path.join(save_dir,new_folder)#新文件夹的路径
    if os.path.exists(save_path):
        shutil.rmtree(save_path)  #如果已经存在该文件夹,移除
    if not os.path.exists(save_path):
        os.makedirs(save_path) #如果不存在该文件夹,则创建,用于储存后续提取出来的文件
    folderlist=os.listdir(folder_path)#文件夹列表
    bulid_files(save_dir=save_path,file_number=len(folderlist))#在新文件夹路径下创建多个文件夹
    for folder in folderlist:#遍历每个文件夹
        filepath=os.path.join(folder_path,folder)#文件夹路径
        filelist=os.listdir(filepath)#每个文件夹下的文件名列表
        for file_name in filelist:#遍历每份文件
            if file_name=='xtbopt.xyz':
                file_fullname = os.path.join(filepath, file_name) #文件所在路径
                new_filepath=os.path.join(save_path,folder)#新文件夹路径
                shutil.copy(file_fullname, os.path.join(new_filepath,folder+'.xyz'))#将列表中的文件复制到新的文件夹,并重新命名

定义好文件夹路径、新文件夹路径及文件夹名字,运行函数fileExtractAndRename(folder_path,save_dir,folder_name)即可完成文件的识别、重命名与复制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

electrochemjy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值