python实现文件及文件夹移动,分类整理 您所在的位置:网站首页 文件夹里分类 python实现文件及文件夹移动,分类整理

python实现文件及文件夹移动,分类整理

2024-07-09 23:51| 来源: 网络整理| 查看: 265

用python实现指定文件及文件夹批量移动至指定位置,按文件名进行文件分类 一、功能概述

最近刚好碰到分类整理文件夹的需求,我这个python小白就学习了一下,在这里分享一下成果~

主要功能是实现把 文件名中有相同部分 的这类文件移动至指定文件夹中,可以根据自己的分类需要,按照文件名相同的部分生成文件夹,把具有同名部分的文件都移动进去

简单解释一下我的需求:文件夹下有大量待整理的文件或者文件夹 可以按照需要在指定路径生成需要的文件夹,把符合要求的所有文件移动至生成的文件夹。本文主要是针对文件名匹配应该去往的文件夹。 编号中断不影响文件的分类,不然新建的文件夹就不能指示里面有哪些编号的文件了 下面还有例子可以康康。

二、使用步骤 1.引入库

代码如下:

import os import shutil import re import math 2.新建文件夹

代码如下:

for root0, dir0, files0 in os.walk(path1): len_subdir = len(dir0) filename = str(dir0).split("_")[-2] for number in range(1, math.ceil(len_subdir/10)+2): subdir_id = "{:0>3d}".format(number) subdir_str = filename + "_" + "sub" + subdir_id #新建文件夹的名字 # print("新建文件夹:", subdir_str) subdir_path = os.path.join(path2, subdir_str) # 新建文件夹的路径 if not os.path.exists(subdir_path): # 若不存在则新建 os.makedirs(subdir_path) break

解释一下上面的代码~~

从文件名字中提取你想要命名新建文件夹的部分,在这个代码中,我想要提取path1路径下文件夹名字中的某些部分作为新建文件夹的名字,举个例子: path1 路径下的文件夹名字是编号为: “K_L_1_0001-0001_001” ——“K_L_1_0001-0001_100”,

我想要新建文件夹名字为: “0001-0001_sub001”——“0001-0001_sub010”

目的是把"K_L_1_0001-0001_001" ——"K_L_1_0001-0001_100"这100个文件按编号分类成

“K_L_1_0001-0001_001” ——“K_L_1_0001-0001_010” 移动至 “0001-0001_sub001” “K_L_1_0001-0001_011” ——“K_L_1_0001-0001_020” 移动至 “0001-0001_sub002” “K_L_1_0001-0001_031” ——“K_L_1_0001-0001_030” 移动至 “0001-0001_sub003” … … 如果编号是断开的也不能影响这个分类,不然就会乱掉,不知道文件夹里都是编号多少的。 所以这里的filename是提取的0001-0001这部分,subdir_id提取的是001,002,003…这部分,“len_subdir/10”是因为10个文件是移动至一个文件夹下的,如果就只是len_subdir就会有多少编号生成多少文件夹。比如100个就生成100个,但我这里只要10个新建文件夹。

3.分配文件,移动归类

代码如下:

for i in range(len(file_list)): if os.path.isfile(path1): pass if os.path.isdir(path1): old_file_path = os.path.join(path1, file_list[i]) # 指定要移动的路径:具体至文件夹名 file_name_number = re.findall(r"\d+", file_list[i])[3] # 提取文件名称中匹配要用的信息 print(old_file_path) file_name_number = int(file_name_number) if file_name_number % 10 == 0: find_id = "{:0>3d}".format(file_name_number//10) else: find_id = "{:0>3d}".format(file_name_number//10 + 1) find_path = filename + '_' + 'sub' + find_id # 完整的匹配信息 new_file_path = os.path.join(path2, find_path) # 指定移动至的路径:具体至文件夹名所在 print("new_file_path:", new_file_path) shutil.move(old_file_path, new_file_path) # 移动

这里就用正则表达式找一下要移动的文件就可以啦,然后就是指定一些匹配的规则就ok啦。特别注意一下,我因为只需要移动文件所以写了if判断,如果文件和文件夹都要移动,就不需要if判断啦! 需要完整代码可以自取奥~



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有