19

例如:

import os
print(os.listdir("path/to/dir"))

将列出目录中的文件。

如何获取目录中所有文件的文件修改时间?

4

3 回答 3

49

在查找目录中所有文件的文件属性时,并且您使用的是 Python 3.5 或更高版本,请使用该os.scandir()函数获取包含文件属性组合的目录列表。这可能比使用os.listdir()然后分别检索文件属性更有效:

import os

with os.scandir() as dir_entries:
    for entry in dir_entries:
        info = entry.stat()
        print(info.st_mtime)

DirEntry.stat()函数在 Windows 上使用时,无需进行任何额外的系统调用,文件修改时间已经可用。数据被缓存,因此额外的entry.stat()调用不会进行额外的系统调用。

您还可以使用pathlib模块面向对象的实例来实现相同的目的:

from pathlib import Path

for path in Path('.').iterdir():
    info = path.stat()
    print(info.st_mtime)

在早期的 Python 版本中,您可以使用os.stat调用来获取文件属性,例如修改时间。

import os

for filename in os.listdir():
    info = os.stat(filename)
    print(info.st_mtime)

st_mtime是 python 2.5 及更高版本上的浮点值,表示自纪元以来的秒数;使用timedatetime模块来解释这些以用于显示目的或类似目的。

请注意,该值的精度取决于您使用的操作系统:

st_atime、st_mtime 和 st_ctime 属性的确切含义和分辨率取决于操作系统和文件系统。例如,在使用 FAT 或 FAT32 文件系统的 Windows 系统上,st_mtime 的分辨率为 2 秒,而 st_atime 的分辨率仅为 1 天。有关详细信息,请参阅您的操作系统文档。

如果您所做的只是获取修改时间,那么该os.path.getmtime方法是一个方便的捷径;它使用os.stat引擎盖下的方法。

但是请注意,该os.stat调用相对昂贵(文件系统访问),因此如果您对大量文件执行此操作,并且每个文件需要多个数据点,则最好使用os.stat和重用返回的信息,而不是使用每个文件将被多次调用的os.path便捷方法。os.stat

于 2012-06-09T11:09:50.403 回答
4

如果您只想要修改后的时间,那么os.path.getmtime(filename)将为您获取。如果您使用listdir参数,您还需要使用os.path.join

import os, os.path

for filename in os.listdir(SOME_DIR):
    print os.path.getmtime(os.path.join(SOME_DIR, filename))
于 2012-06-09T11:59:58.913 回答
2

扩展 Martijn Pieters 的答案,值得注意的是os.scandir它不是递归的,这意味着它不能保证DirEntry.stat()所请求目录的子目录中的文件的最新数据。

如果您正在寻找递归解决方案,使用os.scandir仍然可以比基于os.walk. 这是一个递归返回目录的最后修改时间的示例,包括所有嵌套文件和子目录:

import os

def get_mtime(path, is_root=True):
    """Returns the last modified time for all files recursively within the `path` directory."""
    mtimes = []

    with os.scandir(path) as entries:
        for entry in entries:
            if entry.is_dir():
                mtimes.extend(get_mtime(entry.path, is_root=False))
            else:
                mtimes.append(entry.stat().st_mtime)

    return max(mtimes) if is_root else mtimes

这可以修改为聚合其他特定用例的相关数据。

于 2021-04-22T12:41:45.647 回答