如何访问Macspecific文件元数据?

2024-06-28 19:48:38 发布

您现在位置:Python中文网/ 问答频道 /正文

根据这个页面,不同的操作系统可以从操作系统统计功能。在

http://docs.python.org/2/library/os.html

我有兴趣得到类型和创作者。在

import os
from stat import *
print(os.stat('filename').st_ino)
print(os.stat('filename').st_creator)

此代码适用于inode(st_ino),但会给创建者提供一个错误:

AttributeError: 'posix.stat_result' object has no attribute 'st_creator'

st_类型和st_rsize相同。在

我需要做些什么特别的事情来让这些工作正常吗?在

(这是MacOSX10.5和10.8和Python2。我是Python新手。)


Tags: orgimport功能httpdocs类型oslibrary
3条回答

你可以查一下

print(dir(os.stat('filename')))

查看系统上有哪些属性可用。 不幸的是,macosX没有返回文件所有者的用户名,所以您需要类似pwd的东西将用户ID“转换”为username。在

^{pr2}$

正如另一个答案所提到的,文档中的macos意味着osx之前的版本。在经典的Mac OS中,stat是被模拟的,而Python stat实际上意味着OS X上的stat

因此,您无法获得类型和创建者操作系统统计。相应的低级调用是getattrlist,但这不是Python包装的(也不应该真正使用它)。通过打印,您可以确切地看到stat返回的内容:

>>> import os
>>> s = os.stat('foo')
>>> s
posix.stat_result(st_mode=33152, st_ino=18294505, st_dev=16777218L, st_nlink=1,
st_uid=501, st_gid=501, st_size=0, st_atime=1379052292, st_mtime=1379052292,
st_ctime=1379052308)

让我们在foo上设置一个类型和创建者来测试:

^{pr2}$

python2.x中最简单的答案是MacOS.GetCreatorAndType。然而,它在3.x中消失了,它使用的底层机制也被弃用。如果你的目标仅仅是为自己完成某件事,那么一定要用它。在

>>> import MacOS
>>> MacOS.GetCreatorAndType('foo')
('CREA', 'TYPE')

一种更能证明未来的机制是使用PyObjC,它在Python 3.x上工作,不使用不推荐使用的OS x API:

>>> from Foundation import NSFileManager, NSFileHFSCreatorCode, NSFileHFSTypeCode
>>> attributes = NSFileManager.defaultManager().attributesOfItemAtPath_error_('foo', None)[0]
>>> attributes[NSFileHFSTypeCode]
1415139397L
>>> attributes[NSFileHFSCreatorCode]
1129465153L

这些都是整数,因为PyObjC没有四个字符代码的映射(也没有适当的元数据来理解它得到了什么)。下面是一个快速映射函数,用于检索四个字符的字符串:

>>> def decode(f): return ''.join(chr(f >> i * 8 & 0xff) for i in xrange(3,-1,-1))
... 
>>> decode(attributes[NSFileHFSCreatorCode])
'CREA'
>>> decode(attributes[NSFileHFSTypeCode])
'TYPE'

(如果您使用的是python3,请将上面的xrange替换为range。)

请注意,一般情况下,类型/创建者在OSX中使用不多;它们的功能已被文件扩展名、UTI、MIME类型、每用户和每个文档应用程序绑定所取代。在

此处文档中的“Mac OS”表示Mac OS Classic,即在X之前。对于OSX,unix和FreeBSD注释是相关的。在

相关问题 更多 >