如何检索目录中最近创建的文件
我想要获取一个数组,里面是某个文件夹中最新创建的文件。每一组文件都是在同一段时间内创建的,时间间隔是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