plistlib --- تولید و پارس پروندههای .plist اپل¶
کد منبع: Lib/plistlib.py
این ماژول رابطی برای خواندن و نوشتن پروندههای «فهرست ویژگی» (property list) فراهم میکند که اپل عمدتاً در macOS و iOS از آنها استفاده میکند. این ماژول از هر دو نوع پرونده plist دودویی و XML پشتیبانی میکند.
قالب پرونده فهرست ویژگیها (.plist) یک سریالسازی ساده است که از انواع پایهای شیء، مانند دیکشنریها، فهرستها، اعداد و رشتهها پشتیبانی میکند. معمولاً شیء سطح بالا یک دیکشنری است.
برای نوشتن و تجزیه یک پرونده plist، از توابع dump() و load() استفاده کنید.
برای کار با دادههای plist در شیءهای bytes یا رشته، از dumps() و loads() استفاده کنید.
مقادیر میتوانند رشتهها، اعداد صحیح، اعداد اعشاری، بولیها، تاپلها، فهرستها، دیکشنریها (اما فقط با کلیدهای رشتهای)، اشیای bytes، bytearray یا datetime.datetime باشند.
تغییر یافته در نسخهی 3.4: API جدید، API قدیمی منسوخ شد. پشتیبانی از plistهای قالب دودویی افزوده شد.
تغییر یافته در نسخهی 3.8: پشتیبانی از خواندن و نوشتن توکنهای UID در plistهای دودویی که NSKeyedArchiver و NSKeyedUnarchiver از آنها استفاده میکنند، افزوده شد.
تغییر یافته در نسخهی 3.9: API قدیمی حذف شد.
همچنین ملاحظه نمائید
- صفحهی راهنمای PList
مستندات اپل دربارهی قالب پرونده.
این ماژول توابع زیر را تعریف میکند:
- plistlib.load(fp, *, fmt=None, dict_type=dict, aware_datetime=False)¶
یک پرونده plist را میخواند. fp باید یک شیء پرونده دودویی و قابلخواندن باشد. شیء ریشه واگشاییشده را برمیگرداند (که معمولاً یک دیکشنری است).
fmt قالب پرونده است و مقادیر زیر معتبر هستند:
None: تشخیص خودکار قالب پروندهFMT_XML: قالب پرونده XMLFMT_BINARY: قالب plist دودویی
dict_type نوع مورد استفاده برای دیکشنریهایی است که از پرونده plist خوانده میشوند.
هنگامی که aware_datetime true باشد، فیلدهایی با نوع
datetime.datetimeبهصورت شیء آگاه ایجاد میشوند وtzinfoآنها برابر باdatetime.UTCاست.دادههای XML برای قالب
FMT_XMLبا استفاده از پارسر Expat ازxml.parsers.expatتجزیه میشوند — برای استثناهای ممکن در XML بدشکل، مستندات آن را ببینید. عناصر ناشناخته بهسادگی توسط پارسر plist نادیده گرفته میشوند.پارسر هنگامی که پرونده قابل تجزیه نباشد،
InvalidFileExceptionرا پرتاب میکند.اضافه شده در نسخهی 3.4.
تغییر یافته در نسخهی 3.13: پارامتر فقط کلیدواژهای aware_datetime افزوده شده است.
- plistlib.loads(data, *, fmt=None, dict_type=dict, aware_datetime=False)¶
بارگذاری یک plist از یک شیء bytes یا رشتهای. برای توضیح آرگومانهای کلیدواژهای،
load()را ببینید.اضافه شده در نسخهی 3.4.
تغییر یافته در نسخهی 3.13: هنگامی که fmt برابر با
FMT_XMLباشد، data میتواند یک رشته باشد.
- plistlib.dump(value, fp, *, fmt=FMT_XML, sort_keys=True, skipkeys=False, aware_datetime=False)¶
value را در یک پرونده plist بنویسید. fp باید یک شیء پرونده دودویی قابلنوشتن باشد.
آرگومان fmt قالب پرونده plist را مشخص میکند و میتواند یکی از مقدارهای زیر باشد:
FMT_XML: پرونده plist با قالب XMLFMT_BINARY: پرونده plist قالببندیشده بهصورت دودویی
هنگامی که sort_keys مقدار true باشد (پیشفرض)، کلیدهای دیکشنریها به ترتیب مرتبشده در plist نوشته میشوند، در غیر این صورت به ترتیب پیمایش دیکشنری نوشته میشوند.
هنگامی که skipkeys نادرست باشد (پیشفرض)، اگر کلید یک دیکشنری رشته نباشد، تابع
TypeErrorرا پرتاب میکند؛ در غیر این صورت از چنین کلیدهایی صرفنظر میشود.هنگامی که aware_datetime برابر true باشد و هر فیلدی با نوع
datetime.datetimeبهعنوان یک شیء آگاه تنظیم شده باشد، پیش از نوشتن آن، به منطقه زمانی UTC تبدیل میشود.اگر شیء از نوع پشتیبانینشده یا ظرفی حاوی اشیایی از انواع پشتیبانینشده باشد، یک
TypeErrorپرتاب خواهد شد.برای مقادیر عدد صحیحی که نمیتوان آنها را در پروندههای plist (دودویی) بازنمایی کرد،
OverflowErrorپرتاب میشود.اضافه شده در نسخهی 3.4.
تغییر یافته در نسخهی 3.13: پارامتر فقط کلیدواژهای aware_datetime افزوده شده است.
- plistlib.dumps(value, *, fmt=FMT_XML, sort_keys=True, skipkeys=False, aware_datetime=False)¶
value را بهعنوان یک شیء بایتی با قالب plist برمیگرداند. برای توضیح آرگومانهای کلیدواژهای این تابع، مستندات
dump()را ببینید.اضافه شده در نسخهی 3.4.
کلاسهای زیر در دسترس هستند:
- class plistlib.UID(data)¶
یک
intرا میپوشاند. این برای خواندن یا نوشتن دادههای کدگذاریشده با NSKeyedArchiver استفاده میشود، که شامل UID است (به راهنمای PList مراجعه کنید).- data¶
مقدار عدد صحیح UID. باید در محدوده
0 <= data < 2**64باشد.
اضافه شده در نسخهی 3.8.
ثابتهای زیر در دسترس هستند:
- plistlib.FMT_XML¶
قالب XML برای پروندههای plist.
اضافه شده در نسخهی 3.4.
- plistlib.FMT_BINARY¶
قالب دودویی برای پروندههای plist
اضافه شده در نسخهی 3.4.
این ماژول استثناهای زیر را تعریف میکند:
- exception plistlib.InvalidFileException¶
هنگامی که یک پرونده نتواند تجزیه شود، پرتاب میشود.
اضافه شده در نسخهی 3.4.
مثالها¶
تولید یک plist:
import datetime as dt
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 = dt.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"])