python - 在 Python 中使用 os.stat() 结果时如何忽略隐藏文件?

标签 python python-2.7 python-os

我正在尝试获取特定目录的最后修改时间 (os.stat.st_mtime)。我的问题是我添加了一些隐藏的元数据文件(它们以 . 开头)。如果我使用 os.stat(directory).st_mtime,我会得到更新元数据文件的日期,而不是目录中非隐藏文件被修改的日期。我想获取目录中除隐藏元数据文件之外的所有其他文件的最新修改时间。

我认为可以编写自己的函数,大致如下:

for file in folder:
    if not file starts with '.':
        modified_times.append(os.path.getmtime('/path/to/file')
    last_time = most recent of modified_times

但是,是否可以在 python 中本地执行此操作?或者我是否需要像上面的伪代码一样编写自己的函数(或类似 this question 的函数)?

最佳答案

您想要的结果是不可能的。所有非隐藏文件的最近修改时间不一定对应于虚拟的“忽略隐藏文件的目录的最后修改时间”。问题是当文件移入和移出目录时,目录会被修改,但文件时间戳不会改变(文件被移动,但未被修改)。因此,您提出的解决方案充其量只是一种启发式方法;您可以希望它是正确的,但无法确定。

无论如何,不​​,没有提供这种启发式的内置程序。隐藏文件与非隐藏文件的概念取决于操作系统和文件系统,Python 不提供关心区别的内置 API。如果你想制作一个“last_modified_guess”函数,你必须自己编写(为了提高效率,我推荐 basing it on os.scandir)。

简单如:

last_time = max(entry.stat().st_mtime for entry in os.scandir(somedir) if not entry.name.startswith('.'))

将为您提供非隐藏目录条目的最近修改时间(自纪元以来的秒数)。

更新:进一步反射(reflection),the glob module确实包含 . 前缀的概念,意思是“隐藏”,因此您可以使用 os 的 glob.glob/glob.iglob。 path.join(somedir, '*') 让它为您过滤掉“隐藏”文件。也就是说,通过这样做,您放弃了 os.scandir 的一些潜在好处(免费或缓存的 stat 结果、免费类型检查等),所以如果您所需要的只是“隐藏”过滤,一个简单的 .startswith('.') 检查不值得放弃。

关于python - 在 Python 中使用 os.stat() 结果时如何忽略隐藏文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50938432/

相关文章:

python - python 中 1 + 1 可以等于 3 吗?

python - 编写 'or' 语句的有效方法

python - 尝试使用 Python 中的 REST API 在 Atlassian Bitbucket 中创建拉取请求

Python在JPEG图像上找到黑色方 block 的坐标

python - 为什么 os 模块不运行 wget cmd 命令?

python - 无论当前目录如何,Mac 上的 Chdir 到 ~/Library 都会返回错误

python - django-rq Redis 客户端发送了 AUTH,但没有设置密码

python - 从Python中的URL调用的方法中检索图像

python-2.7 - SymPy:评估总和

python - 将 openpyxl 与 lambda 结合使用