You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

给定路径与.txt文件列表,如何定位并切换至最新目录?

问题解决:找到最新修改的目录并切换

问题说明

程序返回的列表同时包含Windows路径和.txt文件,需要实现:

  1. 按修改时间(mtime)排序所有路径
  2. 先检查最新的路径是否为目录,是则直接切换
  3. 若最新的不是目录,遍历列表找到最新的目录并切换

现有代码

from pathlib import Path
import os

# 切换到照片的父目录 / 替换为实际路径
event_dir = r"G:\Event Photos"
# 按修改时间排序文件夹内所有路径
paths = sorted(Path(event_dir).iterdir(), key=os.path.getmtime)
print(paths)
# 切换到最新的文件夹
if paths[-1].is_dir():
    os.chdir(paths[-1])
    print("已切换到最新目录")
else:
    print("错误 - 最新文件不是目录")

print(os.getcwd())

错误尝试的问题

你修改的else逻辑是从头遍历列表,找到第一个目录就切换,这会拿到最旧的目录,而不是你需要的最新目录:

if paths[-1].is_dir():
    os.chdir(paths[-1])
    print("Changed into most recent DIR")
else:
    for path in paths:
        path.is_dir()
        if path.is_dir():
            os.chdir(path)
            break
print(os.getcwd())

正确解决方案

因为sorted默认是升序排序,paths[-1]是最新修改的,所以我们需要倒序遍历列表,找到第一个目录(也就是最新的目录):

from pathlib import Path
import os

event_dir = r"G:\Event Photos"
# 按修改时间升序排序,paths[-1]是最新的
paths = sorted(Path(event_dir).iterdir(), key=os.path.getmtime)
print(paths)

# 先检查最新的是否为目录
target_dir = None
if paths[-1].is_dir():
    target_dir = paths[-1]
else:
    # 倒序遍历,找第一个目录(最新的目录)
    for path in reversed(paths):
        if path.is_dir():
            target_dir = path
            break

if target_dir:
    os.chdir(target_dir)
    print(f"已切换到最新目录: {target_dir}")
else:
    print("错误 - 当前目录下没有找到任何子目录")

print(os.getcwd())

关键改进点

  • 使用reversed(paths)倒序遍历,确保找到的第一个目录是修改时间最新的
  • 增加target_dir变量统一处理,逻辑更清晰
  • 补充了无目录时的错误提示,避免异常情况

内容的提问来源于stack exchange,提问作者forreno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 04:15:27