از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
روش قالب بندی شماره به عنوان رشته ارز در پایتون
سرفصلهای مطلب
معرفی
فرمت دستی یک عدد به عنوان یک رشته ارز می تواند خسته کننده باشد process. ممکن است فقط چند خط اصلاح داشته باشید، با این حال، زمانی که ما نیاز به انجام کمی تبدیل داشته باشیم، بسیار خسته کننده می شود.
اولین گام برای خودکارسازی این نوع کارها به یک تابع نیاز دارد. در این مقاله به چند روش می پردازیم که می توانید از آنها استفاده کنید اعداد را به عنوان رشته های ارز در پایتون قالب بندی کنید.
روش های قالب بندی اعداد
ما سه کتابخانه و تابع جایگزین را بررسی خواهیم کرد که به ما امکان می دهد اعداد را به رشته ارز تبدیل کنیم:
این locale
ماژول قبلاً در پایتون گنجانده شده است، اما برای استفاده از آن باید Babel را نصب کنیم.
شماره را به عنوان رشته ارز با زبان محلی قالب بندی کنید
این locale
ماژول قبلاً با نسخه شما از قبل نصب شده است پایتون.
این بسته به توسعه دهندگان اجازه می دهد تا برنامه های خود را بومی سازی کنند. به این معنی که آنها مجبور نیستند بدانند نرم افزار آنها در کدام منطقه اجرا می شود، آنها فقط می توانند یک پایگاه کد جهانی بنویسند که بسته به صورت پویا تغییر می کند. روی منطقه استفاده
راه اندازی Locale
برای شروع استفاده از locale
ماژول ابتدا باید محلی را تنظیم کنید:
import locale
print(locale.setlocale(locale.LC_ALL, ''))
print(locale.setlocale(locale.LC_ALL, 'en_GB'))
کد بالا خروجی زیر را تولید می کند:
English_United States.1252
en_GB
برای دریافت لیست مناطق موجود، می توانید آن را جستجو کنید روی MS-LCID. متناوبا، شما می توانید print آن را بیرون آورد:
for lang in locale.windows_locale.values():
print(lang)
for lang in locale.locale_alias.values():
print(lang)
اجرای هر یک از انواع بالا چیزی شبیه به موارد زیر را به همراه خواهد داشت:
en_GB
af_ZA
sq_AL
gsw_FR
am_ET
ar_SA
ar_IQ
ar_EG
ar_LY
ar_DZ
...
قالب بندی اعداد با Locale
با مجموعه محلی ترجیحی خود، می توانید به راحتی رشته های اعداد را قالب بندی کنید:
locale.setlocale(locale.LC_ALL, '')
print(locale.currency(12345.67, grouping=True))
print(locale.currency(12345.67))
با اجرای کد بالا خروجی زیر را دریافت می کنیم:
$12,345.67
$12345.67
با استفاده از str.format() روش
روش بعدی که پوشش خواهیم داد این است str.format()
روشی که این مزیت را دارد که ساده ترین روش است:
number_string = 340020.8
number_commas_only = "{:,}".format(number_string)
print(number_commas_only)
number_two_decimal = "{:.2f}".format(number_string)
print(number_two_decimal)
currency_string = "${:,.2f}".format(number_string)
print(currency_string)
با اجرای کد بالا خروجی زیر را دریافت می کنیم:
340,020.8
340020.80
$340,020.80
اگرچه، این رویکرد بر خلاف روش قبلی که می توانید برای بومی سازی قالب بندی به صورت پویا از آن استفاده کنید، کدگذاری سختی دارد.
شماره را به عنوان رشته ارز با Babel قالب بندی کنید
استفاده کردن بابل شاید یکی از روش های کمتر شناخته شده باشد، با این حال بسیار کاربرپسند و شهودی است. با قالب بندی شماره و ارز و همچنین سایر وظایف بین المللی ارائه می شود.
برخلاف پایتون locale
ماژول، لازم نیست نگران انجام تنظیمات باشید روی یک مقیاس جهانی
برای نصب Babel
از طریق pip
، دستور زیر را اجرا کنید:
$ pip install Babel
...
Successfully installed Babel-2.9.0
پس از نصب، برای دستیابی به نتایج مشابه دو روش دیگر ذکر شده در بالا، می توانید به سادگی تماس بگیرید format_currency()
روی یک رشته:
import babel.numbers
number_string = 340020.8
babel.numbers.format_currency(number_string, "USD", locale='en_US')
با اجرای کد بالا خروجی زیر را دریافت می کنیم:
$340,020.80
برای دریافت لیست کامل مناطق موجود:
avail_loc = babel.localedata.locale_identifiers()
print(avail_loc)
که چیزی شبیه به این است:
('af', 'af_NA', 'af_ZA', 'agq', 'agq_CM', 'ak', 'ak_GH', 'am', 'am_ET',...)
جستجوی اعداد در رشته ها و قالب بندی به عنوان ارز
گاهی اوقات، شما با ورودی عددی مستقیم، مانند ورودی یک کاربر، کار نمی کنید. ممکن است با یک جمله یا یک مجموعه بزرگتر و ناپاک کار کنید. ما می توانیم استفاده کنیم re
ماژول برای فیلتر کردن انواع مختلف ورودی، یافتن مقادیر عددی و قالب بندی آنها.
بیایید از هر سه روش بالا برای قالب بندی ارز در یک جمله استفاده کنیم:
import re
import locale
import babel.numbers
locale.setlocale(locale.LC_ALL, 'en_US')
در مرحله بعد، الگوی regex مورد نیاز برای مطابقت با رشته های اعداد را پیدا می کنیم:
pattern = r'\d+(\.\d{1,2})?'
در مرحله بعد سه روشی را که یاد گرفتیم روی متغیر رشته اعمال می کنیم message
:
message = "Our current budget is 180000, we'll need 25000.67 to cover rent, then 23400.4 for food."
new_message_locale = re.sub(
pattern, lambda x: locale.currency(float(x.group()), grouping=True), message
)
new_message_str = re.sub(
pattern, lambda x: "${:,.2f}".format(float(x.group())), message
)
new_message_babel = re.sub(
pattern,
lambda x: babel.numbers.format_currency(float(x.group()), "USD", locale="en_US"),
message,
)
اجازه دهید خروجی اصلی را با خروجی به دست آمده از هر سه روش مقایسه کنیم:
print(message)
print(new_message_locale)
print(new_message_str)
print(new_message_babel)
Our current budget is 180000, we'll need 25000.67 to cover rent, then 23400.4 for food.
Our current budget is $180,000.00, we'll need $25,000.67 to cover rent, then $23,400.40 for food.
Our current budget is $180,000.00, we'll need $25,000.67 to cover rent, then $23,400.40 for food.
Our current budget is $180,000.00, we'll need $25,000.67 to cover rent, then $23,400.40 for food.
بسته به روی با روشی که شما ترجیح می دهید، طول این اسکریپت را می توان کاهش داد. همانطور که ممکن است متوجه شده باشید محدودیت های خاصی وجود دارد.
اسکریپت همانطور که هست، نمی تواند بین رشته های اعدادی که می خواهید قالب بندی کنید، تفاوت قائل شود. با این حال، بسته به راحتی می توان آن را تغییر داد روی نیازها و موارد استفاده شما
نتیجه
در این مقاله به چند روش تبدیل اعداد به رشته های ارزی مناسب نگاهی انداختیم. ما پوشش داده ایم str.format()
روش، و همچنین locale
و babel
ماژول ها
در نهایت ما این روش ها را با ماژول بیان منظم پایتون ترکیب کردیم تا به طیف وسیع تری از کاربردها دست یابیم. در پایان امیدوارم توانسته باشید چیز جدیدی از این همه یاد بگیرید که می تواند در صرفه جویی در وقت شما کمک کند.
(برچسبها به ترجمه)# python
منتشر شده در 1403-01-12 19:31:03