Я пытаюсь найти способ доступа к файлу plist: /Library/Preferences/com.apple.iPod.plist для доступа к серийным номерам в нем.
Вот мой текущий code--
import os
import plistlib
fileName=os.path.expanduser('/Users/Ryan/Library/Preferences/com.apple.iPod.plist')
pl=plistlib.readPlist(fileName)
for left, right in pl.items():
for values in right.values():
print(values['Serial Number'])
Я продолжаю получать результаты, но появляются и быстрые ошибки. Я получаю это:
plist.py:8: DeprecationWarning: The readPlist function is deprecated, use load() instead pl=plistlib.readPlist(fileName)
а также этот:
File "plist.py", line 16, in <module>
for values in right.values():
AttributeError: 'bool' object has no attribute 'values'
Я предполагаю, что использование функции загрузки довольно просто, хотя мне было трудно понять, используя учебные пособия, которые я нашел в Интернете, чтобы изменить его для моих нужд.
Что касается логического атрибута AttributeError, я не знаю, что я делаю неправильно.
Спасибо!
Чтобы избавиться от ошибки устаревания, замените строку, содержащую readPlist
на
with open(fileName, 'rb') as f:
pl = plistlib.load(f)
Ваша вторая проблема, похоже, связана с изменением plistlib:
Изменено в версии 3.7: значения Dict в результате теперь являются нормальными dicts. Вы больше не можете использовать доступ к атрибутам для доступа к элементам этих словарей.
У меня была аналогичная проблема: AttributeError: 'dict' object has no attribute 'children'
был решен путем замены вхождения someObj.children[:]
на someObj['children']
. Я полагаю, что что-то подобное может случиться с вашим призывом к right.values()
, но это трудно сказать без фактического примера right.values()
.