Python 如何读取目录中的文件属性?

Python 如何读取目录中的文件属性?,python,file,Python,File,例如: import os print(os.listdir("path/to/dir")) 将列出目录中的文件 如何获取目录中所有文件的文件修改时间?在查找目录中所有文件的文件属性时,如果您使用的是Python 3.5或更高版本,请使用以获取合并了文件属性的目录列表。这可能比使用os.listdir()然后分别检索文件属性更有效: import os with os.scandir() as dir_entries: for entry in dir_entri

例如:

import os
print(os.listdir("path/to/dir"))
将列出目录中的文件


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

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

import os

with os.scandir() as dir_entries:
    for entry in dir_entries:
        info = entry.stat()
        print(info.st_mtime)
在Windows上使用时,不必进行任何其他系统调用,文件修改时间已经可用。数据被缓存,因此额外的
entry.stat()
调用不会进行额外的系统调用

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

from pathlib import Path

for path in Path('.').iterdir():
    info = path.stat()
    print(info.st_mtime)
在早期的Python版本中,可以使用调用来获取文件属性,如修改时间

import os

for filename in os.listdir():
    info = os.stat(filename)
    print(info.st_mtime)
st_mtime
是Python2.5及更高版本上的浮点值,表示从新纪元开始的秒数;使用或模块解释这些内容,以用于显示或类似目的

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

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

如果您所做的只是获得修改时间,那么该方法是一个方便的快捷方式;它在引擎盖下使用
os.stat
方法


但是,请注意,
os.stat
调用相对昂贵(文件系统访问),因此如果对许多文件执行此操作,并且每个文件需要一个以上的数据点,您最好使用
os.stat
并重用返回的信息,而不是使用
os.path
方便的方法,在这些方法中,
os.stat
将对每个文件进行多次调用。

如果您只需要修改的时间,那么
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))

扩展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

可以对其进行修改以聚合其他特定用例的相关数据。

can
DirEntry.stat()的可能副本的可能副本获取从照片的EXIF数据中获取的日期?@Stevoisiak:no.
DirEntry
纯粹是文件系统关于给定文件的簿记信息,并且不包括嵌入在文件本身中的信息。