例如:
import os
print(os.listdir("path/to/dir"))
将列出目录中的文件。
如何获取目录中所有文件的文件修改时间?
在查找目录中所有文件的文件属性时,并且您使用的是 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 及更高版本上的浮点值,表示自纪元以来的秒数;使用time
或datetime
模块来解释这些以用于显示目的或类似目的。
请注意,该值的精度取决于您使用的操作系统:
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
如果您只想要修改后的时间,那么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
这可以修改为聚合其他特定用例的相关数据。