Я не думаю, что код будет работать как на MacOS, так и на Ubuntu, потому что файлы Apple MacOS и iOS .plist не JSON. Они следуют больше за форматом XML, и они даже говорят это в документах :
Сам файл обычно кодируется с использованием кодировки Unicode UTF-8 и содержимого структурированы с использованием XML.
Выполнение вашего кода на Ma c или в Ubuntu:
import ujson
with open("Info.plist", 'r') as plist_as_file:
ujson.dumps(plist_as_file)
приведет к:
Traceback (most recent call last):
File "test.py", line 4, in <module>
ujson.dumps(plist_as_file)
TypeError: <_io.BufferedReader name='Info.plist'> is not JSON serializable
Если по какой-либо причине Вы можете успешно открыть .plist и не получите эту ошибку, тогда то, что у вас есть , не является фактическим файлом .plist. Ошибка одна и та же, независимо от того, является ли файл open
режимом r
или rb
.
Вы сказали, что получили:
TypeError: � is not JSON serializable
, и я думаю, что это та же ошибка, но по какой-то причине она распечатывается неправильно. Итак, ujson
на самом деле не подходит для использования здесь, и это не проблема с Git.
Python предлагает встроенный модуль для чтения / записи файлов .plist: plistlib .
Он имеет те же методы dump
/ dumps
и load
/ loads
, что и модуль json
(или ujson
).
import plistlib
with open("Info.plist", 'rb') as plist_as_file:
plist_data = plistlib.load(plist_as_file)
# The entire contents is stored as a dict
print(plist_data)
# Access specific content as a dict
print(plist_data["CFBundleShortVersionString"])
print(plist_data["UIMainStoryboardFile"])