gpt4 book ai didi

python - Python 中最近更新的文件列表

转载 作者:行者123 更新时间:2023-11-30 22:05:54 25 4
gpt4 key购买 nike

因此,使用以下代码我可以轻松找到文件夹中最近更新的文件:

files = os.listdir(UPLOAD_DIR+"/"+configData[obj]["client_name"])
paths = [os.path.join(UPLOAD_DIR+"/"+configData[obj]["client_name"], basename) for basename in files]
file = max(paths, key=os.path.getctime)

但是如果有两个或多个文件具有完全相同的更新时间怎么办?如何获取此类文件的列表?

最佳答案

最短的代码:找到最新的ctime,然后获取具有该最新ctime的所有文件:

def most_recent(paths):
if not paths:
return []
latest_ctime = max(os.path.getctime(p) for p in paths)
most_recent_files = [p for p in paths if os.path.getctime(p)==latest_ctime]
return most_recent_files

但是,我们在路径列表上循环两次,如果最近文件的 ctime 在两次循环之间发生变化,则存在竞争条件的风险:在这种情况下,在第二次循环中不会再次找到它循环。

我们可以在一个循环中完成它,用更多的代码,消除竞争条件:

def most_recent_one_loop(paths):
out = []
latest_ctime = 0
for p in paths:
ct = os.path.getctime(p)
if ct > latest_ctime:
latest_ctime = ct
out = [p]
elif ct == latest_ctime:
out.append(p)
return out

正如我们所期望的,速度大约是原来的两倍(用于测试的文件夹中大约有 100 个路径):

%timeit most_recent(paths)
# 1000 loops, best of 3: 477 µs per loop

%timeit most_recent_one_loop(paths)
# 1000 loops, best of 3: 239 µs per loop

关于python - Python 中最近更新的文件列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52873655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com