如何检索目录中最近创建的文件

1 投票
2 回答
2582 浏览
提问于 2025-04-18 18:17

我想要获取一个数组,里面是某个文件夹中最新创建的文件。每一组文件都是在同一段时间内创建的,时间间隔是1000毫秒。

在这个列表中,前四个文件是在同一个1000毫秒内创建的,我只想获取这四个文件:

sceflh.jpg - 2014-08-23 05:07:46.100000000
rgxanx.jpg - 2014-08-23 05:07:45.900000000
byoiup.jpg - 2014-08-23 05:07:45.700000000
rrqgnh.jpg - 2014-08-23 05:07:45.500000000
sqthcv.jpg - 2014-08-23 05:07:40.320000000
ebrmvv.jpg - 2014-08-23 05:07:40.200000000
xzvsnt.jpg - 2014-08-23 05:07:40.110000000
ckiinz.jpg - 2014-08-23 05:07:40.100000000

我该怎么做才能获取这样的列表呢?我现在的代码只是给我所有文件的列表:

def get_files(directory):
    files = []
    for file in [f for f in os.listdir(directory) if os.path.isfile(os.path.join(directory,f))]:
        files.append( '{0}/{1}'.format(directory, file) )
    return files

编辑:这是我最终的代码

import os

def get_recent_files(directory, threshold=0.9):
    files = sorted(get_files(directory), key=os.path.getmtime,reverse=True)
    filtered = filter(lambda x: os.path.getmtime(files[0]) - os.path.getmtime(x) <= threshold, files)
    return filtered

def get_files(directory):
    files = []
    for file in [f for f in os.listdir(directory) if os.path.isfile(os.path.join(directory, f))]:
        files.append( '{0}/{1}'.format(directory, file) )
    return files

for file in get_recent_files("images", 0.900):
    print(file)

2 个回答

0

获取文件列表以及它们的创建时间(或修改时间),然后进行排序:

a = [(os.path.getctime(f), f)for f in os.listdir(os.curdir)]
a.sort()

从列表中过滤出在最近的文件创建后一秒内创建的文件

most_recent = a[-1][0]
b = [thing for thing in a if most_recent - thing[0] <= 1]
2

你可以在Linux系统上通过修改日期,或者在Windows系统上通过创建日期来对文件进行排序,这可以使用os.path.getmtime这个功能。

sorted(get_files("."),key = os.path.getmtime,reverse = True)[:5]

如果你只想获取文件的名字,可以使用下面的代码:

[os.path.split(x)[1]  for x in  sorted(get_files("."),key = os.path.getmtime,reverse = True)[:5]]

如果你想用你原来的函数并设置一个阈值,可以参考以下代码:

files =  sorted(get_files("."), key=os.path.getmtime,reverse=True)
filtered =  filter(lambda x: os.path.getmtime(files[0]) - os.path.getmtime(x) <= .09,files)

为了更好地匹配你的问题,可以使用以下代码:

import os
from datetime import datetime

def get_files(directory):
    files = []
    for file in [f for f in os.listdir(directory) if os.path.isfile(os.path.join(directory,f))]:
        da = datetime.fromtimestamp(os.path.getmtime(file))
        files.append( '{0}/{1}-{2}'.format(directory,file,da)) # add time from timestamp
    return files

print sorted(get_files("."),key=lambda x: float(x.rsplit(":",1)[-1]),reverse = True)[:5] # sort based on seconds/milisecs

撰写回答