例如,
import os
print os.listdir()
列出目录中的文件。
如何获取目录中所有文件的文件修改时间?
答案 0 :(得分:37)
在查找目录中所有文件的文件属性时,如果您使用的是Python 3.5或更高版本,请使用os.scandir()
function获取目录列表,其中包含文件属性。这可能比使用os.listdir()
更高效,然后单独检索文件属性:
import os
with os.scandir() as dir_entries:
for entry in dir_entries:
info = entry.stat()
print(info.st_mtime)
DirEntry.stat()
function在Windows上使用时,不必进行任何额外的系统调用,文件修改时间已经可用。数据已缓存,因此额外的entry.stat()
调用不会进行额外的系统调用。
您还可以使用pathlib
module面向对象的实例来实现相同的目标:
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及更高版本的浮点值,表示自纪元以来的秒数;使用time
或datetime
模块来解释这些模块以用于显示目的或类似目的。
请注意,值的精确度取决于您使用的操作系统:
st_atime,st_mtime和st_ctime属性的确切含义和解析取决于操作系统和文件系统。例如,在使用FAT或FAT32文件系统的Windows系统上,st_mtime具有2秒的分辨率,st_atime只有1天的分辨率。有关详细信息,请参阅操作系统文档。
如果你所做的只是获得修改时间,那么os.path.getmtime
方法就是一个方便的捷径;它使用了os.stat
方法。
但请注意,os.stat
调用相对昂贵(文件系统访问),因此如果您对大量文件执行此操作,并且每个文件需要多个数据点,则最好使用{ {1}}并重复使用返回的信息,而不是使用os.stat
便捷方法,其中每个文件将多次调用os.path
。
答案 1 :(得分:3)
如果您只想要修改时间,那么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))
答案 2 :(得分:0)
扩展 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
这可以修改为聚合其他特定用例的相关数据。