python - Python 中的命令 getatime() 与 Finder(在 macOS 上)中的“上次打开日期”不同。我如何获得后者?
问题描述
我开始使用 Python (3.9) 并想用它来重新组织我计算机上的填充 (macOS Catalina v 10.15.7)。为了加载(mp4)文件上次打开的日期,我使用了:
os.path.getatime(file_path)
但是,此日期与我在 Finder 中查看文件时找到的日期不对应,也不对应于上次修改的日期或创建,也没有固定数量的差异。加载日期似乎是从现在到创建日期之间的随机日期。我猜这些日期只是以另一种方式确定的,即什么算作开幕是不同的。有没有办法获取您在 Finder 中看到的日期?
找到了解决方案:(归功于3mpty)
在我的 Documents 文件夹中获取文件 Test.txt 的“上次访问日期”的代码
file_name = "Test.txt"
folder_path = "/Users/myName/Documents"
file_path = folder_path + "/" + file_name
file_Last_Opened = getDateLastAccessed(file_path_name)
print(file_Last_Opened)
def getDateLastAccessed(file_path_name):
command = ['mdls', '-n', 'kMDItemLastUsedDate', file_name]
output = subprocess.check_output(command).decode('utf-8')
return output.split('=')[1].strip()
函数 getDateLastAccessed 返回一个格式为 "%Y-%m-%d %H:%M:%S %z" 的字符串,然后可以将其转换为带有time.strptime(...,"%Y-%m-%d %H:%M:%S %z")
.
解决方案
MacOS 使用通常的 os* 包无法访问的元数据。要直接执行此操作,您必须使用 coreservices api 并阅读:kMDItemLastUsedDate来自 python 可以通过pyobjc实现。
您还可以尝试通过执行mdls
工具和解析输出来解决它:
mdls file.txt | grep -m 1 kMDItemLastUsedDate
在python中:
import subprocess
command = 'mdls file.txt | grep -m 1 kMDItemLastUsedDate'
output = subprocess.check_output(command, shell = True).decode('utf-8')
date_str = output.split('=')[1].strip() # in example '2020-09-23 08:43:17 +0000'
推荐阅读
- node.js - 电子邮件 Node.js 类型错误的基础
- sql - 将 SQL 查询复制并粘贴到 MS Word
- email - 使用命令行从应用程序在浏览器中打开 GMail 帐户
- c - 在linux shell脚本中用特殊字符替换文本?
- ruby-on-rails - 相册中所有照片的 Rails 标签
- java - LinkedList .equals vs == 整数上的运算符
- c++ - C ++用户定义的函数来填充数组
- r - 关于 nls 适合 R 的问题 - 为什么这是一个奇怪的适合?
- design-patterns - Controllers should contain all the requests from a specific entity or screen?
- mysql - 如何监控mysql中特定表的SELECT语句数?