plistlib --- Tạo và phân tích các tệp Apple .plist¶
Source code: Lib/plistlib.py
Mô-đun này cung cấp giao diện để đọc và ghi các tệp "danh sách thuộc tính" được Apple sử dụng, chủ yếu trên macOS và iOS. Mô-đun này hỗ trợ cả tệp plist nhị phân và XML.
Định dạng tệp danh sách thuộc tính (.plist) là một chuỗi tuần tự hóa đơn giản hỗ trợ các loại đối tượng cơ bản, như từ điển, danh sách, số và chuỗi. Thông thường đối tượng cấp cao nhất là từ điển.
Để viết ra và phân tích một tệp plist, hãy sử dụng các hàm dump() và load().
Để làm việc với dữ liệu plist theo byte hoặc đối tượng chuỗi, hãy sử dụng dumps() và loads().
Các giá trị có thể là chuỗi, số nguyên, số float, boolean, bộ dữ liệu, danh sách, từ điển (nhưng chỉ với các khóa chuỗi), các đối tượng bytes, bytearray hoặc datetime.datetime.
Thay đổi trong phiên bản 3.4: API mới, API cũ không được dùng nữa. Đã thêm hỗ trợ cho các định dạng nhị phân.
Thay đổi trong phiên bản 3.8: Đã thêm hỗ trợ để đọc và ghi mã thông báo UID ở dạng nhị phân được NSKeyedArchiver và NSKeyedUnarchiver sử dụng.
Thay đổi trong phiên bản 3.9: Zz000zz cũ đã bị xóa.
Xem thêm
- PList manual page
Tài liệu của Apple về định dạng tệp.
Mô-đun này xác định các chức năng sau:
- plistlib.load(fp, *, fmt=None, dict_type=dict, aware_datetime=False)¶
Đọc một tập tin plist. fp phải là một đối tượng tệp nhị phân và có thể đọc được. Trả về đối tượng gốc đã được giải nén (thường là từ điển).
Zz000zz là định dạng của tệp và các giá trị sau là hợp lệ:
None: Tự động phát hiện định dạng fileFMT_XML: định dạng tệp XMLFMT_BINARY: Định dạng số nhị phân
Zz000zz là loại được sử dụng cho các từ điển được đọc từ tệp plist.
Khi aware_datetime là đúng, các trường có loại
datetime.datetimesẽ được tạo là aware object, vớitzinfolàdatetime.UTC.Dữ liệu XML cho định dạng
FMT_XMLđược phân tích cú pháp bằng trình phân tích cú pháp Expat từxml.parsers.expat-- xem tài liệu của nó để biết các trường hợp ngoại lệ có thể xảy ra đối với XML không đúng định dạng. Các phần tử không xác định sẽ bị trình phân tích cú pháp plist bỏ qua.Trình phân tích cú pháp tăng
InvalidFileExceptionkhi không thể phân tích cú pháp tệp.Added in version 3.4.
Thay đổi trong phiên bản 3.13: Thông số chỉ từ khóa aware_datetime đã được thêm vào.
- plistlib.loads(data, *, fmt=None, dict_type=dict, aware_datetime=False)¶
Tải một số nguyên từ một đối tượng byte hoặc chuỗi. Xem
load()để biết giải thích về các đối số từ khóa.Added in version 3.4.
Thay đổi trong phiên bản 3.13: data có thể là một chuỗi khi fmt bằng
FMT_XML.
- plistlib.dump(value, fp, *, fmt=FMT_XML, sort_keys=True, skipkeys=False, aware_datetime=False)¶
Viết value vào một tập tin plist. fp phải là một đối tượng tệp nhị phân có thể ghi.
Đối số fmt chỉ định định dạng của tệp plist và có thể là một trong các giá trị sau:
FMT_XML: tệp plist được định dạng XMLFMT_BINARY: Tệp plist có định dạng nhị phân
Khi sort_keys là true (mặc định), các khóa của từ điển sẽ được ghi vào plist theo thứ tự được sắp xếp, nếu không chúng sẽ được viết theo thứ tự lặp lại của từ điển.
Khi skipkeys sai (mặc định), hàm sẽ tăng
TypeErrorkhi khóa của từ điển không phải là chuỗi, nếu không các khóa đó sẽ bị bỏ qua.Khi aware_datetime là đúng và bất kỳ trường nào có loại
datetime.datetimeđược đặt là aware object, nó sẽ chuyển đổi sang múi giờ UTC trước khi ghi.Một
TypeErrorsẽ được nâng lên nếu đối tượng thuộc loại không được hỗ trợ hoặc vùng chứa chứa các đối tượng thuộc loại không được hỗ trợ.Một
OverflowErrorsẽ được nâng lên cho các giá trị số nguyên không thể được biểu diễn trong tệp plist (nhị phân).Added in version 3.4.
Thay đổi trong phiên bản 3.13: Thông số chỉ từ khóa aware_datetime đã được thêm vào.
- plistlib.dumps(value, *, fmt=FMT_XML, sort_keys=True, skipkeys=False, aware_datetime=False)¶
Trả về value dưới dạng đối tượng byte có định dạng plist. Xem tài liệu về
dump()để biết giải thích về các đối số từ khóa của hàm này.Added in version 3.4.
Các lớp sau đây có sẵn:
- class plistlib.UID(data)¶
Kết thúc một
int. Điều này được sử dụng khi đọc hoặc ghi dữ liệu được mã hóa NSKeyedArchiver, chứa UID (xem hướng dẫn sử dụng PList).- data¶
Giá trị int của UID. Nó phải nằm trong phạm vi
0 <= data < 2**64.
Added in version 3.8.
Các hằng số sau đây có sẵn:
- plistlib.FMT_XML¶
Định dạng XML cho tệp plist.
Added in version 3.4.
- plistlib.FMT_BINARY¶
Định dạng nhị phân cho tệp plist
Added in version 3.4.
Mô-đun xác định các ngoại lệ sau:
- exception plistlib.InvalidFileException¶
Xảy ra khi không thể phân tích cú pháp một tệp.
Added in version 3.4.
Ví dụ¶
Tạo một số nguyên:
nhập ngày giờ dưới dạng dt
nhập plistlib
pl = dict(
aString = "Chết tiệt",
aList = ["A", "B", 12, 32.1, [1, 2, 3]],
aFloat = 0,1,
anInt = 728,
aDict = dict(
anotherString = "<xin chào & xin chào!>",
aThirdString = "M\xe4ssig, Ma\xdf",
aTrueValue = Đúng,
aFalseValue = Sai,
),
someData = b"<nhị phân>",
someMoreData = b"<rất nhiều rác nhị phân>" * 10,
aDate = dt.datetime.now()
)
print(plistlib.dumps(pl).decode())
Phân tích một số nguyên:
nhập plistlib
plist = b"""<plist version="1.0">
<dict>
<key>foo</key>
<string>thanh</string>
</dict>
</plist>"""
pl = plistlib.loads(plist)
print(pl["foo"])