写了一个工具,可以用来整理文件夹
# 整理文件夹的工具 作者:C4n
# 1.遍历文件夹和子文件夹(有无递归)
# 2.按日、月、年进行整理(传入枚举型变量)
# 3.起始时间到结束时间
# 4.指定保存路径
import re
import shutil
from datetime import datetime
import os
import time
from enum import Enum
# 枚举类型
class Accuracy(Enum):
year = 0
mouth = 1
day = 2
hour = 3
minute = 4
class IsRecursive(Enum):
no = 0
yes = 1
def in_timerange(file_path, start_time, end_time):
# 切割日期
start_time, end_time = re.split('-', start_time), re.split('-', end_time)
# 转换类型
start_time, end_time = list(map(int, start_time)), list(map(int, end_time))
# 列表拆解传参(拆包)
start_time, end_time = datetime(*start_time), datetime(*end_time)
# 转换类型 这里使用了按访问时间来进行分类,getctime就是创建时间,getmtime就是修改时间
file_time = time.localtime(os.path.getmtime(file_path))
file_time = datetime.fromtimestamp(time.mktime(file_time))
# 作比较
if start_time < file_time < end_time:
return file_time
else:
return 0
def sort_dir(dir_path, start_time, end_time, accuracy, isrecursive=IsRecursive.no, save_path=None):
"""
@param isrecursive: 是否进行递归
@param save_path:存储路径,一般会和递归搭配使用
@param dir_path: 目录路径
@param start_time: 起始时间
@param end_time: 结束时间
@param accuracy: 精度,也就是分类精确到年月日
@return:
"""
# 如果文件夹路径不是以'\'结尾,则补上
if dir_path[-1] != '\\':
dir_path += '\\'
# 如果存储路径没有指定,就默认为同级目录,选用递归时一般会指定存储路径
if save_path is None:
save_path = dir_path
if save_path[-1] != '\\':
save_path += '\\'
# dir_list:目录路径
dir_list = os.listdir(dir_path)
# 遍历目录
for file in dir_list:
# file_path:文件路径
file_path = dir_path + file.title()
# 如果选择递归且为文件夹,则进行递归操作
if isrecursive:
if os.path.isdir(file_path):
sort_dir(file_path, start_time, end_time, accuracy, isrecursive=IsRecursive.no, save_path=save_path)
# tmp:在日期区间内则为创建时间,否则则为0
tmp = in_timerange(file_path, start_time, end_time)
# 如果tmp在日期区间内,则要移动它到指定文件夹
if tmp:
# 分割日期字符串,便于操作
tmp = re.split('-| |,|:', str(tmp))
# s:要创建的文件夹名字 年-月-日
s = ''
# j:为了下面创建的文件夹不要多出一个'-'
j = 0
for i in tmp[0:accuracy.value + 1]:
s += i
if j != accuracy.value:
s += '-'
j += 1
# make_dir:创建的文件夹路径
make_dir = save_path + s
# 文件夹不存在则创建
if not os.path.exists(make_dir):
os.mkdir(make_dir)
# 移动文件到指定文件夹
shutil.move(file_path, make_dir)
if __name__ == '__main__':
sort_dir("E:\\2022", "2020-10-10", "2022-12-30", Accuracy.day, IsRecursive.yes,save_path="E:\\2022")