如何获取项目目录下目标文件夹的最新修改子目录名称?
我来帮你搞定这个问题!咱们一步步来解决:你需要获取目标文件夹下最后修改的子目录名称(仅名称,不是完整路径),然后在该子目录文件数达到上限时,自动递增创建新文件夹。下面是具体的实现方案:
第一步:正确获取最后修改的子目录名称
你之前的代码可能没精准筛选子目录,或者拿到的是完整路径。我们可以用os.scandir()来高效处理——它比传统的os.listdir更省资源,因为能直接获取文件/目录的属性信息。
import os def get_last_modified_subdir(target_dir): # 遍历目标目录,只筛选子目录 subdirs = [] with os.scandir(target_dir) as entries: for entry in entries: if entry.is_dir(): # 存储子目录名称和最后修改时间戳 subdirs.append((entry.name, entry.stat().st_mtime)) if not subdirs: # 若目标目录下没有子目录,返回None(可根据需求调整默认值) return None # 按修改时间倒序排序,取第一个就是最新的子目录 subdirs.sort(key=lambda x: x[1], reverse=True) return subdirs[0][0]
这个函数会返回仅子目录名称,完全符合你的需求。
第二步:判断文件数量并自动创建新目录
拿到最新子目录的名称后,我们需要检查它里面的文件数量是否达到上限,达到就自动生成下一个递增的目录(假设目录名都是数字格式,比如1、2、3...):
def create_next_dir_if_needed(target_dir, max_files=100): # 确保目标目录存在,不存在则自动创建 os.makedirs(target_dir, exist_ok=True) last_dir_name = get_last_modified_subdir(target_dir) if not last_dir_name: # 没有子目录时,创建第一个目录(默认命名为"1") new_dir_name = "1" os.makedirs(os.path.join(target_dir, new_dir_name), exist_ok=True) return new_dir_name # 尝试将目录名转为整数(如果你的目录名是其他格式,这里需要调整逻辑) try: current_num = int(last_dir_name) except ValueError: raise ValueError("现有子目录名称必须为纯数字格式,请调整命名规则或修改代码逻辑") # 拼接最新子目录的完整路径 last_dir_path = os.path.join(target_dir, last_dir_name) # 统计该子目录下的文件数量(仅统计文件,不包含子目录) file_count = 0 with os.scandir(last_dir_path) as entries: for entry in entries: if entry.is_file(): file_count += 1 if file_count >= max_files: # 文件数达到上限,创建下一个递增目录 new_num = current_num + 1 new_dir_name = str(new_num) new_dir_path = os.path.join(target_dir, new_dir_name) os.makedirs(new_dir_path, exist_ok=True) return new_dir_name else: # 未达到上限,返回当前最新的子目录名称 return last_dir_name
完整使用示例
把两个函数结合起来,替换成你的目标目录和文件上限即可:
# 替换成你的目标文件夹路径 TARGET_FOLDER = "./your_target_folder" # 设置每个子目录的文件数量上限 MAX_FILES_LIMIT = 100 # 调用函数,获取当前要使用的目录 current_active_dir = create_next_dir_if_needed(TARGET_FOLDER, MAX_FILES_LIMIT) print(f"当前可使用的目录:{current_active_dir}")
一些实用提示
- 如果你的子目录名称不是纯数字(比如
folder_1、batch_2),只需修改current_num = int(last_dir_name)这部分,提取名称里的数字再递增即可 os.scandir()在处理大量文件/目录时性能更优,推荐使用exist_ok=True参数能避免创建目录时因已存在而报错,提升代码健壮性
内容的提问来源于stack exchange,提问作者Kemal Firat
相关产品推荐
相关产品推荐

