plistlib
— Generate and parse Apple .plist
files¶
소스 코드: Lib/plistlib.py
이 모듈은 애플, 주로 macOS와 iOS에서 사용되는 “프로퍼티 리스트(property list)” 파일을 읽고 쓰는 인터페이스를 제공합니다. 이 모듈은 바이너리와 XML plist 파일을 모두 지원합니다.
프로퍼티 리스트 (.plist
) 파일 형식은 딕셔너리, 리스트, 숫자 및 문자열과 같은 기본 객체 형을 지원하는 간단한 직렬화입니다. 일반적으로 최상위 객체는 딕셔너리입니다.
plist 파일을 쓰고 구문 분석하려면, dump()
와 load()
함수를 사용하십시오.
To work with plist data in bytes or string objects, use dumps()
and loads()
.
값은 문자열, 정수, 부동 소수점, 논릿값, 튜플, 리스트, 딕셔너리 (단, 문자열 키만 가능), bytes
, bytearray
또는 datetime.datetime
객체일 수 있습니다.
버전 3.4에서 변경: 새 API, 이전 API는 폐지되었습니다. 바이너리 형식 plist에 대한 지원이 추가되었습니다.
버전 3.8에서 변경: NSKeyedArchiver 와 NSKeyedUnarchiver 에서 사용되듯이 바이너리 plist에서 UID
토큰을 읽고 쓰는 것에 대한 지원이 추가되었습니다.
버전 3.9에서 변경: 낡은 API가 제거되었습니다.
더 보기
- PList manual page
애플의 파일 형식 설명서.
이 모듈은 다음 함수를 정의합니다:
- plistlib.load(fp, *, fmt=None, dict_type=dict, aware_datetime=False)¶
plist 파일을 읽습니다. fp는 읽을 수 있는 바이너리 파일 객체여야 합니다. 해독된 루트 객체를 반환합니다 (일반적으로 딕셔너리입니다).
fmt는 파일의 형식이며 다음 값이 유효합니다:
None
: 파일 형식을 자동 감지FMT_XML
: XML 파일 형식FMT_BINARY
: 바이너리 plist 형식
dict_type은 plist 파일에서 읽은 딕셔너리에 사용되는 형입니다.
When aware_datetime is true, fields with type
datetime.datetime
will be created as aware object, withtzinfo
asdatetime.UTC
.FMT_XML
형식의 XML 데이터는xml.parsers.expat
의 Expat 구문 분석기로 구문 분석됩니다 – 잘못된 형식의 XML로 인한 예외에 대해서는 해당 설명서를 참조하십시오. 알 수 없는 엘리먼트는 plist 구문분석기에서 단순히 무시됩니다.바이너리 형식의 구문 분석기는 파일을 구문 분석할 수 없을 때
InvalidFileException
를 발생시킵니다.Added in version 3.4.
버전 3.13에서 변경: The keyword-only parameter aware_datetime has been added.
- plistlib.loads(data, *, fmt=None, dict_type=dict, aware_datetime=False)¶
Load a plist from a bytes or string object. See
load()
for an explanation of the keyword arguments.Added in version 3.4.
버전 3.13에서 변경: data can be a string when fmt equals
FMT_XML
.
- plistlib.dump(value, fp, *, fmt=FMT_XML, sort_keys=True, skipkeys=False, aware_datetime=False)¶
plist 파일에 value를 씁니다. Fp는 쓰기 가능한 바이너리 파일 객체여야 합니다.
fmt 인자는 plist 파일의 형식을 지정하며 다음 값 중 하나일 수 있습니다:
FMT_XML
: XML 형식의 plist 파일FMT_BINARY
: 바이너리 형식의 plist 파일
sort_keys가 참(기본값)이면 딕셔너리의 키가 정렬된 순서로 plist에 기록되고, 그렇지 않으면 딕셔너리의 이터레이션 순서로 기록됩니다.
skipkeys가 거짓(기본값)일 때, 딕셔너리의 키가 문자열이 아니면 함수는
TypeError
를 발생시킵니다. 그렇지 않으면 해당 키를 건너뜁니다.When aware_datetime is true and any field with type
datetime.datetime
is set as an aware object, it will convert to UTC timezone before writing it.객체가 지원되지 않는 형이거나 지원되지 않는 형의 객체를 포함하는 컨테이너면
TypeError
가 발생합니다.(바이너리) plist 파일에서 표현할 수 없는 정숫값은
OverflowError
를 발생시킵니다.Added in version 3.4.
버전 3.13에서 변경: The keyword-only parameter aware_datetime has been added.
- plistlib.dumps(value, *, fmt=FMT_XML, sort_keys=True, skipkeys=False, aware_datetime=False)¶
plist 형식의 바이트열 객체로 value를 반환합니다. 이 함수의 키워드 인자에 대한 설명은
dump()
설명서를 참조하십시오.Added in version 3.4.
다음 클래스를 사용할 수 있습니다:
- class plistlib.UID(data)¶
int
를 감쌉니다. 이것은 UID를 포함하는 NSKeyedArchiver 인코딩된 데이터를 읽거나 쓸 때 사용됩니다 (PList 매뉴얼을 참조하십시오).It has one attribute,
data
, which can be used to retrieve the int value of the UID.data
must be in the range0 <= data < 2**64
.Added in version 3.8.
다음 상수를 사용할 수 있습니다:
- plistlib.FMT_XML¶
plist 파일의 XML 형식.
Added in version 3.4.
- plistlib.FMT_BINARY¶
plist 파일의 바이너리 형식
Added in version 3.4.
예제¶
plist 만들기:
import datetime
import plistlib
pl = dict(
aString = "Doodah",
aList = ["A", "B", 12, 32.1, [1, 2, 3]],
aFloat = 0.1,
anInt = 728,
aDict = dict(
anotherString = "<hello & hi there!>",
aThirdString = "M\xe4ssig, Ma\xdf",
aTrueValue = True,
aFalseValue = False,
),
someData = b"<binary gunk>",
someMoreData = b"<lots of binary gunk>" * 10,
aDate = datetime.datetime.now()
)
print(plistlib.dumps(pl).decode())
plist 구문 분석하기:
import plistlib
plist = b"""<plist version="1.0">
<dict>
<key>foo</key>
<string>bar</string>
</dict>
</plist>"""
pl = plistlib.loads(plist)
print(pl["foo"])