روش های مختلفی برای ارائه خروجی یک برنامه وجود دارد. داده ها را می توان به صورت قابل خواندن انسانی چاپ کرد یا برای استفاده در آینده برای یک پرونده نوشته شد. در این فصل برخی از امکانات مورد بحث قرار خواهد گرفت.
7. 1. قالب بندی خروجی جالب تر
تاکنون با دو روش نوشتن مقادیر روبرو شده ایم: بیانیه های بیان و عملکرد چاپ ().(راه سوم استفاده از روش نوشتن () اشیاء فایل است ؛ پرونده خروجی استاندارد را می توان به عنوان sys. stdout ارجاع داد. برای اطلاعات بیشتر در این مورد به مرجع کتابخانه مراجعه کنید.)
غالباً می خواهید کنترل بیشتری بر قالب بندی خروجی خود داشته باشید تا اینکه به سادگی چاپ مقادیر جدا شده از فضا را چاپ کنید. روش های مختلفی برای قالب بندی خروجی وجود دارد.
- برای استفاده از لفظات رشته ای فرمت شده ، قبل از علامت نقل قول باز یا علامت نقل قول سه گانه ، رشته ای را با F یا F شروع کنید. در داخل این رشته ، می توانید یک عبارت پایتون را بین بنویسیدشخصیت هایی که می توانند به متغیرها یا مقادیر تحت اللفظی مراجعه کنند.
>>> سال = 2016 >>> رویداد = "همه پرسی" >>> fنتایج حاصل از سال> رویداد>' "نتایج همه پرسی 2016"
>>> بله_وات = 42_572_654 >>> no_votes = 43_132_495 >>> درصد = بله_وات / (بله_وات + no_votes) >>> ' بله آرا '.قالب(بله_وات, درصد) "42572654 بله رای 49. 67 ٪"
هنگامی که به خروجی فانتزی احتیاج ندارید بلکه فقط می خواهید یک نمایش سریع از برخی متغیرها برای اهداف اشکال زدایی داشته باشید ، می توانید هر مقدار را با توابع rep () یا str () به یک رشته تبدیل کنید.
تابع STR () به منظور بازگرداندن بازنمایی از مقادیر است که نسبتاً قابل خواندن انسانی هستند ، در حالی که REP () به معنای تولید بازنمایی است که می تواند توسط مترجم خوانده شود (یا در صورت عدم وجود نحو معادل ، یک syntaxerror را مجبور می کند). برای اشیاء که نمایندگی خاصی برای مصرف انسان ندارند ، STR () همان مقدار REP () را برمی گردانند. مقادیر بسیاری ، مانند اعداد یا ساختار مانند لیست ها و فرهنگ لغت ، با استفاده از هر یک از عملکرد ، نمایش مشابهی دارند. رشته ها ، به ویژه ، دو بازنمایی مجزا دارند.
>>> s = 'سلام دنیا.' >>> str(s) 'سلام دنیا.' >>> مجدداً(s) "'سلام دنیا.'" >>> str(1/7) '0. 14285714285714285' >>> x = 10 * 3. 25 >>> y = 200 * 200 >>> s = "مقدار x است" + مجدداً(x) + '، و y' است + مجدداً(y) + '. ' >>> چاپ(s) مقدار x 32. 5 و y 40000 است. >>> # چاپ () یک رشته به نقل قول های رشته ای و backslashes اضافه می کند: . سلام = 'سلام دنیا
' >>> جهنم = مجدداً(سلام) >>> چاپ(جهنم) "سلام ، جهان n" >>> # استدلال برای چاپ مجدد () ممکن است هر شیء پایتون باشد: . مجدداً((x, y, ('هرزنامه ها', "تخم مرغ"))) "(32. 5 ، 40000 ، (" اسپم "،" تخم مرغ ")" ماژول String شامل یک کلاس الگوی است که روش دیگری برای جایگزینی مقادیر در رشته ها ، استفاده از مکان هایی مانند $ X و جایگزین کردن آنها با مقادیر یک فرهنگ لغت ارائه می دهد ، اما کنترل بسیار کمتری از قالب بندی را ارائه می دهد.
7. 1. 1. رشته های رشته ای فرمت شده ow
لفظات رشته ای فرمت شده (همچنین به صورت کوتاه F-strings نامیده می شود) به شما امکان می دهد مقدار عبارات پایتون را در داخل یک رشته با پیشوند رشته با f یا f و نوشتن عبارات به عنوان درج کنید.
یک مشخصات با فرمت اختیاری می تواند عبارت را دنبال کند. این اجازه می دهد تا کنترل بیشتری بر نحوه قالب بندی مقدار داشته باشد. مثال زیر بعد از اعشاری به سه مکان می رسد:
>>> وارد كردن ریاضی >>> چاپ(f"مقدار PI تقریباً است ریاضی.pi:. 3f>.') مقدار PI تقریباً 3. 142 است.
عبور از یک عدد صحیح پس از ":" باعث می شود که این قسمت حداقل تعداد شخصیت ها گسترده باشد. این برای تنظیم ستون ها مفید است.
>>> جدول = 'sjoerd': 4127, "جک": 4098, 'DCAB': 7678> >>> برای نام, تلفن in جدول.موارد(): . چاپ(f'نام:10> ==> تلفن:10d>') . Sjoerd ==>4127 Jack ==>4098 Dcab ==>7678
از دیگر اصلاح کننده ها می توان برای تبدیل مقدار قبل از قالب بندی استفاده کرد.'! a' اعمال ASCII () ، '! s' اعمال STR () ، و '! r' اعمال rep ():
>>> حیوانات = "مارماهی" >>> چاپ(f"شناور من پر از حیوانات>.') هواناو من پر از مارماهی است. >>> چاپ(f"شناور من پر از حیوانات!r>.') هواناو من پر از مارماهی است'.
از مشخصات = می توان برای گسترش یک عبارت به متن عبارت ، یک علامت برابر ، سپس بازنمایی عبارت ارزیابی شده استفاده کرد:
>>> اشکالات = 'roaches' >>> شمردن = 13 >>> حوزه = 'هال' >>> چاپ(f'اشکال زدایی اشکالات=> شمردن=> حوزه=>') اشکالات اشکال زدایی = "roaches" تعداد = 13 منطقه = "اتاق نشیمن"
برای کسب اطلاعات بیشتر در مورد مشخصات ، به اصطلاحات خود مستند سازی مراجعه کنید. برای مراجعه به این مشخصات فرمت ، به راهنمای مرجع برای مشخصات مینی زبان مراجعه کنید.
7. 1. 2. روش رشته () روش ()
استفاده اساسی از روش Str. Format () به این شکل است:
>>> چاپ('ما هستیم <> چه کسی می گوید "<>!"'.قالب("شوالیه ها", 'ni')) ما شوالیه هایی هستیم که می گویند "نی!" براکت ها و کاراکترهای موجود در آنها (به نام فیلدهای فرمت) با اشیاء منتقل شده به روش Str. Format () جایگزین می شوند. از یک عدد در براکت ها می توان برای اشاره به موقعیت شیء منتقل شده به روش Str. Format () استفاده کرد.
>>> چاپ(' وت '.قالب('هرزنامه ها', "تخم مرغ")) هرزنامه و تخم مرغ >>> چاپ(' وت '.قالب('هرزنامه ها', "تخم مرغ")) تخم مرغ و هرزنامه اگر آرگومان های کلیدی در روش Str. Format () استفاده شود ، مقادیر آنها با استفاده از نام آرگومان ذکر می شود.
>>> چاپ('این is .'.قالب( . غذا='هرزنامه ها', صفت="کاملاً وحشتناک")) این اسپم کاملاً وحشتناک است. آرگومان های مثبت و کلیدی می توانند به طور خودسرانه ترکیب شوند:
>>> چاپ("داستان از , وت .'.قالب("بیل", "مانفرد", . دیگر='جورج')) داستان بیل ، مانفرد و جورج. اگر یک رشته با فرمت بسیار طولانی دارید که نمی خواهید تقسیم کنید ، خوب است اگر بتوانید متغیرهایی را که به جای آن به صورت نامگذاری شده با نام فرمت می شوند ، ارجاع دهید. این کار را می توان با عبور از DICT و استفاده از براکت های مربعی برای دسترسی به کلیدها انجام داد.
>>> جدول = 'sjoerd': 4127, "جک": 4098, 'DCAB': 8637678> >>> چاپ(جک: ؛sjoerd: ; ' . 'DCAB: '.قالب(جدول)) جک: 4098 ؛Sjoerd: 4127 ؛DCAB: 8637678
این کار همچنین می تواند با عبور از فرهنگ لغت جدول به عنوان استدلال کلمات کلیدی با علامت ** انجام شود.
>>> جدول = 'sjoerd': 4127, "جک": 4098, 'DCAB': 8637678> >>> چاپ(جک: ؛sjoerd: ؛DCAB: '.قالب(**جدول)) جک: 4098 ؛Sjoerd: 4127 ؛DCAB: 8637678
این امر به ویژه در ترکیب با عملکرد داخلی VAR () ، که یک فرهنگ لغت حاوی تمام متغیرهای محلی را برمی گرداند ، مفید است.
به عنوان نمونه ، خطوط زیر مجموعه ای از ستونهای مرتب و مرتب را تولید می کنند که عدد صحیح و مربع و مکعب آنها را نشان می دهند:
>>> برای x in دامنه(1, 11): . چاپ(' '.قالب(x, x*x, x*x*x)) . 1 1 1 2 4 8 3 9 27 4 16 64 5 25 125 6 36 216 7 49 343 8 64 512 9 81 729 10 100 1000 برای یک مرور کلی از قالب بندی رشته با Str. Format () ، به نحو رشته Format مراجعه کنید.
7. 1. 3. قالب بندی رشته دستی ow
در اینجا همان جدول مربع ها و مکعب ها ، به صورت دستی فرمت شده است:
>>> برای x in دامنه(1, 11): . چاپ(مجدداً(x).عادلانه(2), مجدداً(x*x).عادلانه(3), پایان=' ') . # توجه داشته باشید استفاده از "پایان" در خط قبلی . چاپ(مجدداً(x*x*x).عادلانه(4)) . 1 1 1 2 4 8 3 9 27 4 16 64 5 25 125 6 36 216 7 49 343 8 64 512 9 81 729 10 100 1000
(توجه داشته باشید که یک فضای بین هر ستون با استفاده از روش چاپ () اضافه شده است: همیشه بین آرگومان های خود فاصله می دهد.)
روش Str. rjust () اشیاء رشته ای با استفاده از آن با فضاهایی در سمت چپ ، رشته ای را در یک زمینه با عرض مشخص تنظیم می کند. روشهای مشابه Str. ljust () و Str. Center () وجود دارد. این روشها چیزی نمی نویسند ، آنها فقط یک رشته جدید را برمی گردانند. اگر رشته ورودی خیلی طولانی باشد ، آنها آن را کوتاه نمی کنند ، اما آن را بدون تغییر باز می گردانند. این باعث می شود ستون شما در خارج از کشور به وجود بیاید اما این معمولاً بهتر از گزینه جایگزین است که در مورد یک ارزش دروغ می گوید.(اگر واقعاً کوتاه می خواهید ، همیشه می توانید یک عمل برش اضافه کنید ، مانند x. ljust (n) [: n].)
روش دیگری وجود دارد ، str. zfill () ، که یک رشته عددی را در سمت چپ با صفرها قرار می دهد. این در مورد علائم به علاوه و منهای درک می کند:
>>> '12'.ZFILL(5) '00012' >>> '-3. 14'.ZFILL(7) '-003. 14' >>> '3. 14159265359'.ZFILL(5) '3. 14159265359'
7. 1. 4. قالب بندی رشته قدیمی قدیمی
اپراتور ٪ (Modulo) همچنین می تواند برای قالب بندی رشته استفاده شود. با توجه به مقادیر "رشته" ، نمونه های ٪ در رشته با عناصر صفر یا بیشتر مقادیر جایگزین می شوند. این عمل معمولاً به عنوان درون یابی رشته شناخته می شود. مثلا:
>>> وارد كردن ریاضی >>> چاپ("مقدار PI تقریباً است 5. 3f ٪.' % ریاضی.pi) مقدار PI تقریباً 3. 142 است. اطلاعات بیشتر را می توان در بخش قالب بندی رشته به سبک PrintF یافت.
7. 2. خواندن و نوشتن پرونده ها
باز () یک شیء پرونده را برمی گرداند ، و بیشتر با دو آرگومان موقعیتی و یک آرگومان کلیدی مورد استفاده قرار می گیرد: باز (نام پرونده ، حالت ، رمزگذاری = هیچ)
>>> f = باز کن("کار", 'W', رمز="UTF-8") آرگومان اول رشته ای حاوی نام پرونده است. آرگومان دوم رشته دیگری است که حاوی چند کاراکتر است که نحوه استفاده از پرونده را توصیف می کند. حالت می تواند "R" باشد که پرونده فقط خوانده شود ، "W" فقط برای نوشتن (یک فایل موجود با همین نام پاک می شود) ، و "A" پرونده را برای ضمیمه باز می کند. هر داده ای که به پرونده نوشته شده است به طور خودکار به پایان اضافه می شود.'R+' پرونده را برای خواندن و نوشتن باز می کند. آرگومان حالت اختیاری است. اگر حذف شود ، "R" فرض خواهد شد.
به طور معمول ، پرونده ها در حالت متن باز می شوند ، به این معنی که شما رشته هایی را از و به پرونده می خوانید و می نویسید ، که در یک رمزگذاری خاص رمزگذاری می شوند. اگر رمزگذاری مشخص نشده باشد ، پیش فرض وابسته به پلتفرم است (به باز (باز) مراجعه کنید). از آنجا که UTF-8 استاندارد مدرن de-facto است ، رمزگذاری = "UTF-8" توصیه می شود مگر اینکه بدانید که نیاز به استفاده از رمزگذاری متفاوت دارید. افزودن یک "B" به حالت ، پرونده را در حالت باینری باز می کند. داده های حالت باینری به عنوان اشیاء بایت خوانده و نوشته می شود. هنگام باز کردن پرونده در حالت باینری ، رمزگذاری را نمی توانید مشخص کنید.
در حالت متن ، پیش فرض هنگام خواندن ، تبدیل انتهای خط خاص پلت فرم ( n در یونیکس ، r n در ویندوز) فقط به n است. هنگام نوشتن در حالت متن ، پیش فرض تبدیل وقایع n به انتهای خط خاص سیستم عامل است. این اصلاح پشت صحنه برای داده های پرونده برای پرونده های متنی مناسب است ، اما داده های باینری مانند آن را در پرونده های JPEG یا EXE خراب می کند. هنگام خواندن و نوشتن چنین پرونده هایی از حالت باینری بسیار مراقب باشید.
استفاده از کلمه کلیدی در هنگام برخورد با اشیاء فایل خوب است. مزیت این است که پرونده پس از اتمام مجموعه خود به درستی بسته شده است ، حتی اگر یک استثنا در مقطعی مطرح شود. استفاده از آن نیز بسیار کوتاه تر از نوشتن معادل است - در نهایت بلوک ها:
>>> با باز کن("کار", رمز="UTF-8") as f: . read_data = f.خواندن() >>> # می توانیم بررسی کنیم که پرونده به طور خودکار بسته شده است. >>> f.بسته درست است، واقعی اگر از کلمه کلیدی با کلمه کلیدی استفاده نمی کنید ، باید با F. Close () تماس بگیرید تا پرونده را ببندید و بلافاصله منابع سیستم مورد استفاده در آن را آزاد کنید.
تماس با F. Write () بدون استفاده از کلمه کلیدی با یا تماس با F. Close () ممکن است منجر به استدلال های F. Write () به طور کامل روی دیسک نوشته نشود ، حتی اگر این برنامه با موفقیت خارج شود.
پس از بسته شدن یک شی فایل ، یا با بیانیه یا با تماس با F. Close () ، تلاش برای استفاده از شیء فایل به طور خودکار شکست خواهد خورد.
>>> f.بستن() >>> f.خواندن() Traceback (جدیدترین تماس آخر):فایل""، خط1، که درارزش: عملکرد I/O در پرونده بسته.
7. 2. 1. روشهای پرونده پرونده
بقیه مثالهای موجود در این بخش فرض می کنند که یک شیء فایل به نام F قبلاً ایجاد شده است.
برای خواندن مطالب یک پرونده ، با F. READ (اندازه) تماس بگیرید ، که مقداری از داده ها را می خواند و آن را به عنوان یک رشته (در حالت متن) یا شی بایت (در حالت باینری) برمی گرداند. اندازه یک آرگومان عددی اختیاری است. هنگامی که اندازه حذف یا منفی شود ، کل محتوای پرونده خوانده می شود و باز می گردد. اگر پرونده دو برابر حافظه دستگاه شما باشد ، مشکل شماست. در غیر این صورت ، حداکثر کاراکترهای اندازه (در حالت متن) یا بایت های اندازه (در حالت باینری) خوانده می شوند و برگردانده می شوند. در صورت رسیدن به پایان پرونده ، f. read () یک رشته خالی ('') را برمی گرداند.
>>> f.خواندن() "این کل پرونده است. n" >>> f.خواندن() ''
f. readline () یک خط واحد را از پرونده می خواند. یک شخصیت جدید ( n) در انتهای رشته باقی مانده است و اگر پرونده به خط جدید ختم نشود ، فقط در آخرین خط پرونده حذف می شود. این باعث می شود مقدار برگشتی بدون ابهام باشد. اگر f. readline () یک رشته خالی را برگرداند ، پایان پرونده به دست آمده است ، در حالی که یک خط خالی توسط ' n' نشان داده شده است ، رشته ای که فقط یک خط جدید دارد.
>>> f.خط() "این اولین خط پرونده است. n ' >>> f.خط() "خط دوم پرونده n" >>> f.خط() ''
برای خواندن خطوط از یک پرونده ، می توانید از روی شیء پرونده حلقه کنید. این حافظه کارآمد ، سریع است و منجر به کد ساده می شود:
>>> برای خط in f: . چاپ(خط, پایان='') . این اولین خط پرونده است. خط دوم پرونده
اگر می خواهید تمام خطوط یک پرونده را در یک لیست بخوانید ، می توانید از لیست (f) یا f. readlines () نیز استفاده کنید.
F. Write (رشته) محتوای رشته را به پرونده می نویسد و تعداد کاراکترهای نوشته شده را برمی گرداند.
>>> f.نوشتن('این یک امتحان است
') 15 قبل از نوشتن آنها ، انواع دیگر اشیاء باید تبدیل شوند - یا به یک رشته (در حالت متن) یا یک شی بایت (در حالت باینری) -
>>> ارزش = ('جواب', 42) >>> s = str(ارزش) # tuple را به رشته تبدیل کنید >>> f.نوشتن(s) 18 F. Tell () یک عدد صحیح را که موقعیت فعلی شیء فایل را در پرونده نشان داده شده به عنوان تعداد بایت از ابتدای پرونده هنگام در حالت باینری و یک شماره مات در حالت متن باز می گرداند.
برای تغییر موقعیت شیء فایل ، از F. Seek (افست ، از کجا) استفاده کنید. موقعیت از افزودن افست به یک نقطه مرجع محاسبه می شود. نقطه مرجع توسط آرگومان از کجا انتخاب می شود. از آنجا که مقدار 0 از ابتدای پرونده اندازه گیری می شود ، 1 از موقعیت پرونده فعلی استفاده می کند و 2 از انتهای پرونده به عنوان نقطه مرجع استفاده می کند. از کجا می توان با استفاده از ابتدای پرونده به عنوان نقطه مرجع ، 0 را حذف و به طور پیش فرض کرد.
>>> f = باز کن("کار", 'RB+') >>> f.نوشتن(b'0123456789abcdef') 16 >>> f.دنبال کردن(5) # در پرونده به ششمین بایت بروید 5 >>> f.خواندن(1) B'5 ' >>> f.دنبال کردن(-3, 2) # قبل از پایان به 3 بایت بروید 13 >>> f.خواندن(1) B'd ' در فایلهای متنی (آنهایی که بدون B در رشته حالت باز شده اند) ، فقط به دنبال ابتدای پرونده مجاز هستند (استثناء در جستجوی انتهای پرونده با Seek (0 ، 2)) و تنها مقادیر معتبر افستآنهایی که از f. tell () یا صفر برگشتند. هر مقدار جبران دیگر رفتار نامشخصی ایجاد می کند.
اشیاء فایل روش های اضافی مانند isatty () و truncate () دارند که کمتر مورد استفاده قرار می گیرند. برای یک راهنمای کامل برای پرونده های پرونده با مرجع کتابخانه مشورت کنید.
7. 2. 2. ذخیره داده های ساختاری با JSON
رشته ها را می توان به راحتی از یک پرونده نوشت و خواند. اعداد کمی تلاش بیشتری می کنند ، زیرا روش خواندن () فقط رشته ها را برمی گرداند ، که باید به تابعی مانند int () منتقل شود ، که رشته ای مانند "123" را می گیرد و مقدار عددی خود را 123 برمی گرداند. ذخیره انواع پیچیده تر داده های پیچیده تر مانند لیست های تو در تو و فرهنگ لغت ، تجزیه و سریال سازی با دست پیچیده می شود.
پایتون به جای اینکه کاربران را به طور مداوم در حال نوشتن و اشکال زدایی کد برای ذخیره انواع داده های پیچیده در پرونده ها ، به شما امکان می دهد از قالب تعویض داده محبوب به نام JSON (یادداشت شیء JavaScript) استفاده کنید. ماژول استاندارد به نام JSON می تواند سلسله مراتب داده پایتون را بگیرد و آنها را به بازنمایی رشته ها تبدیل کند. این فرآیند سریال سازی نامیده می شود. بازسازی داده ها از بازنمایی رشته ، deserializing نامیده می شود. بین سریال سازی و ناامیدی کردن ، رشته ای که نمایانگر شیء است ممکن است در یک پرونده یا داده ذخیره شده باشد ، یا از طریق اتصال شبکه به برخی از دستگاه های دوردست ارسال شود.
قالب JSON معمولاً توسط برنامه های مدرن استفاده می شود تا تبادل داده ها را فراهم کند. بسیاری از برنامه نویسان از قبل با آن آشنا هستند و این باعث می شود انتخاب خوبی برای قابلیت همکاری باشد.
اگر یک Object X دارید ، می توانید بازنمایی رشته JSON آن را با یک خط کد ساده مشاهده کنید:
>>> وارد كردن json >>> x = [1, 'ساده', "لیست"] >>> json.زباله(x) '[1 ، "ساده" ، "لیست"] "
نوع دیگری از عملکرد Dumps () به نام Dump () ، به سادگی شیء را به یک فایل متنی سریال می کند. بنابراین اگر F یک شیء فایل متنی برای نوشتن باز شده است ، می توانیم این کار را انجام دهیم:
json.زباله(x, f)
برای رمزگشایی مجدد شی ، اگر F یک فایل باینری یا شیء فایل متنی است که برای خواندن باز شده است:
x = json.بار(f)
پرونده های JSON باید در UTF-8 رمزگذاری شوند. هنگام باز کردن پرونده JSON به عنوان یک فایل متنی برای خواندن و نوشتن ، از رمزگذاری = "UTF-8" استفاده کنید.
این تکنیک سریال سازی ساده می تواند لیست ها و فرهنگ لغت ها را اداره کند ، اما سریال سازی نمونه های کلاس دلخواه در JSON نیاز به تلاش کمی دارد. مرجع ماژول JSON شامل توضیحی در مورد این است.
ترشی - ماژول ترشی
برخلاف JSON ، ترشی یک پروتکل است که به سریال سازی اشیاء پایتون کاملاً پیچیده اجازه می دهد. به همین ترتیب ، مخصوص پایتون است و نمی توان از آن برای برقراری ارتباط با برنامه های نوشته شده به زبان های دیگر استفاده کرد. همچنین به طور پیش فرض ناامن است: در صورت تهیه داده ها توسط یک مهاجم ماهر ، داده های ترشی که از یک منبع غیرقابل اعتماد تهیه می شود ، می تواند کد دلخواه را اجرا کند.
استراتژی برای تجارت گزینه های...
ما را در سایت استراتژی برای تجارت گزینه های دنبال می کنید
برچسب :
نویسنده : فریبا کامران
بازدید : 37
تاريخ : پنجشنبه
16 شهريور
1402 ساعت: 13:05