【问题标题】:Create a recursive sorted list of files (by oldest first)创建文件的递归排序列表(按最早的)
【发布时间】:2013-09-21 00:00:43
【问题描述】:

我正在尝试从目录创建文件的递归列表,然后根据年龄对它们进行排序。我不太关心文件扩展名,只关心最旧的文件。

这是我目前所拥有的,但它不是按日期排序的......

例如: /home/用户/文件夹/dir1 /home/用户/文件夹/dir2 /home/user/folder/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/folder 下的所有文件,首先处理最旧的文件。我需要先处理最旧的文件,而不是先处理 dir1/ 中的所有文件,然后再处理 dir2/ 中的所有文件,而不管它存在于该树结构中的什么位置。我的想法是我可以写一个 while list is not empty loop 来处理所有文件。如果有更好的方法,我很想学习。感谢您在此处添加的任何帮助。

【问题讨论】:

  • 它是如何排序的?看起来没有错误(但我之前从未听说过fnmatch)。
  • ctime 不是创建时间。这是最后一次 inode 更改的时间。不幸的是,无法保证获取文件的实际年龄,但您可以使用mtime 获取自上次修改以来文件的年龄。
  • 感谢小次郎,帮了大忙!

标签: python python-2.7


【解决方案1】:

我想我明白了..

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')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-06
    • 2017-03-27
    • 1970-01-01
    • 2013-12-20
    相关资源
    最近更新 更多