首页 > 解决方案 > 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").

标签: pythonpython-3.xmacostime

解决方案


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'

推荐阅读