Как получить расширенные атрибуты файла MacOS с помощью python?

Мне интересно получить больше информации из файла с помощью python.

Я знаю, что использование os.stat (например, ниже) возвращает информацию о файле, но я хотел бы получить другие атрибуты из файла, такие как «Откуда?»

os.stat(filename)

posix.stat_result(st_mode=33184, st_ino=131691855, st_dev=16777220L, st_nlink=1, st_uid=501, st_gid=20, st_size=174241, st_atime=1445046864, st_mtime=1445045836, st_ctime=1445045836)

Однако меня интересуют не эти атрибуты. Я заинтересован в получении всех перечисленных ниже атрибутов (в частности, «Откуда»)

введите описание изображения здесь

Как я могу получить поле «Откуда»?

Я пытался использовать os.access, но это не возвращает то, что я хочу, и искал документация по ОС, поэтому я не уверен, что еще можно попробовать.


person Chris    schedule 17.10.2015    source источник
comment
Если вы имеете в виду расширенные атрибуты MacOS, укажите это в заголовке... вы знаете, что это специфично для MacOS?   -  person smci    schedule 17.10.2015
comment
Спасибо за указание. Я не знал.   -  person Chris    schedule 17.10.2015


Ответы (1)


Мой пример:

введите описание изображения здесь

xattr -lp com.apple.metadata:kMDItemWhereFroms ~/Projects/apimon/apimon/check/tests/resources/brus-\>lux\ dec\ 28.pdf 
com.apple.metadata:kMDItemWhereFroms:
00000000  62 70 6C 69 73 74 30 30 A2 01 02 5F 10 54 68 74  |bplist00..._.Tht|
00000010  74 70 73 3A 2F 2F 62 65 2D 69 6E 74 65 72 6E 65  |tps://be-interne|
00000020  74 2E 62 65 6E 65 2D 73 79 73 74 65 6D 2E 63 6F  |t.bene-system.co|
00000030  6D 2F 2F 68 70 2F 70 64 66 73 65 72 76 69 63 65  |m//hp/pdfservice|
00000040  3F 70 64 66 3D 4B 4C 57 56 57 4C 47 31 34 34 35  |?pdf=KLWVWLG1445|
00000050  30 31 33 33 39 30 32 33 36 42 53 31 36 39 32 30  |013390236BS1690|
00000060  31 35 50 08 0B 62 00 00 00 00 00 00 01 01 00 00  |15P..b..........|
00000070  00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 00  |................|
00000080  00 00 00 00 00 63                                |.....c|
00000086

похоже, есть пакет под названием xattr выглядит неплохо.. (вам нужно pip install xattr его)

In [6]: import xattr
In [7]: x = xattr.xattr('/Users/buzzi/Projects/apimon/apimon/check/tests/resources/brus->lux dec 28.pdf')

In [8]: x.items()
Out[8]: 
[(u'com.apple.metadata:kMDItemWhereFroms',
  'bplist00\xa2\x01\x02_\x10Thttps://be-internet.bene-system.com//hp/pdfservice?pdf=KLWVWLG1445013390236BS169201P\x08\x0bb\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00c'),
 (u'com.apple.quarantine',
  '0001;562127d1;Google Chrome;BF24C900-46D5-4F95-9B7B-C36AA6B0ACC7')]

Дальнейшие исследования привели меня к biplist модулю. (вам нужно pip install biplist это)

>>> import biplist
>>> biplist.readPlistFromString(x.get('com.apple.metadata:kMDItemWhereFroms'))
['https://be-internet.bene-system.com//hp/pdfservice?pdf=KLWVWLG1445013390236BS169201',
 '']

ВЫПОЛНЕНО!

person Javier Buzzi    schedule 17.10.2015
comment
Хорошо... Я думал, ты это пропустил. Не знал про биплист. - person smci; 17.10.2015
comment
И я не исследую — это лучшее, что есть в ответах на случайные вопросы: вы узнаете то, на что никогда бы не наткнулись, потому что у вас никогда не было этой конкретной проблемы :P - person Javier Buzzi; 17.10.2015