我正在尝试从目录创建一个递归的文件列表,然后根据年龄对它们进行排序。我真的不太关心文件扩展,只关注最旧的文件。
这是我目前所拥有的,但它没有按日期排序......
例如: / home / user中/文件夹/ DIR1 / home / user中/文件夹/ DIR2 /家庭/用户/文件夹/ DIR3
def returnold():
for root, dirnames, filenames in os.walk(imagedir):
for filename in fnmatch.filter(filenames, '*.jpg, *.png'):
matches.append(os.path.join(root, filename))
return sorted(matches, key=lambda p: os.path.getctime(os.path.join(user_dir, p)))
imagedir = /home/user/folder
filelist = returnold()
老实说,我的目标是首先处理home / user /文件夹下的所有文件,最旧的文件。而不是处理dir1 / first中的所有文件,然后是dir2 / next,我需要先处理最旧的文件,而不管它在树结构中的位置。我的想法是我可以写一个while列表不是空循环来处理所有文件。如果有更好的方法,我很乐意学习。感谢您在这里添加的任何帮助。
答案 0 :(得分:3)
我想我想出来了..
import os
import fnmatch
def returnold(folder):
matches = []
for root, dirnames, filenames in os.walk(folder):
for filename in fnmatch.filter(filenames, '*.*'):
matches.append(os.path.join(root, filename))
return sorted(matches, key=os.path.getmtime)
nextimage = returnold('/path/to/folder')
这将按文件修改日期返回排序列表,nextimage [0]是最旧的,nextimage [-1]是最新的。或者,如果您只想返回最旧的文件(而不是已排序的列表),则可以返回列表的最小值,如下所示:
def returnold(folder):
matches = []
for root, dirnames, filenames in os.walk(folder):
for filename in fnmatch.filter(filenames, '*.*'):
matches.append(os.path.join(root, filename))
return min(matches, key=os.path.getmtime)
nextimage = returnold('/path/to/folder')