در این مقاله، تمام روشهای عملی برای تبدیل اعداد انگلیسی به اعداد فارسی پایتون (اعداد فارسی Python) را بررسی میکنیم؛ از سادهترین راهها تا استفاده از کتابخانههای تخصصی. چه روی وباپلیکیشن با جنگو کار میکنید، چه ابزار خط فرمان یا یک سیستم گزارشگیری، این راهنما برای شماست.
اگر در حال توسعه یک برنامه پایتون ( Python ) برای کاربران فارسیزبان هستید، بومیسازی خروجی عددی شما میتواند ضروری باشد. اعداد فارسی با اعداد انگلیسی تفاوت دارند. به جای 0 تا 9، از این ارقام استفاده میشود:
۰ ۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹
چرا تبدیل اعداد انگلیسی به اعداد فارسی در پایتون؟
وقتی مخاطب شما فارسیزبان است، فقط ترجمه کلمات کافی نیست. نمایش اعداد با فرمت فارسی باعث خوانایی بهتر و احساس آشنایی بیشتری برای کاربر میشود. در موارد زیر کاربرد دارد:
- نمایش قیمت، تاریخ، مقدار یا درصد
- افزایش راحتی و درک کاربران بومی
- تطابق با استانداردهای محلی (بهویژه در اخبار، فاکتورها، یا اپلیکیشنهای مالی)
ایدهی پایه برای تبدیل اعداد به فارسی در Python: نگاشت ارقام
ابتدا یک نگاشت ساده بین اعداد انگلیسی و فارسی در پایتون ( Python ) میسازیم:
EN_TO_FA_DIGITS = {
'0': '۰',
'1': '۱',
'2': '۲',
'3': '۳',
'4': '۴',
'5': '۵',
'6': '۶',
'7': '۷',
'8': '۸',
'9': '۹',
}
اکثر روشها بر پایه همین دیکشنری کار میکنند.
روش اول تبدیل اعداد فارسی پایتون: استفاده از str.translate()
تابع translate()
در پایتون برای جایگزینی نویسهها بهصورت مستقیم و سریع استفاده میشود. باید ابتدا جدول تبدیل را بسازید:
def english_to_persian_translate(text):
table = str.maketrans('0123456789', '۰۱۲۳۴۵۶۷۸۹')
return text.translate(table)
# مثال
print(english_to_persian_translate("The year is 2025."))
# خروجی: The year is ۲۰۲۵.
✅ مزایا: سریع، تمیز، بدون نیاز به کتابخانه خارجی
❌ معایب: فقط روی رشتهها کار میکند؛ برای اعداد باید به رشته تبدیل شوند
در دوره ی پایتون ما شرکت کنید و سریع تر از همیشه وارد بازار کار شوید.
ثبتنام کنید
روش دوم برای تبدیل اعداد به فارسی در Python : استفاده از replace()
در حلقه
در این روش از یک حلقه برای جایگزینی تکتک ارقام استفاده میکنیم:
def english_to_persian_replace(text):
digits = '0123456789'
persian_digits = '۰۱۲۳۴۵۶۷۸۹'
for en, fa in zip(digits, persian_digits):
text = text.replace(en, fa)
return text
# مثال
print(english_to_persian_replace("Tel: 09123456789"))
# خروجی: Tel: ۰۹۱۲۳۴۵۶۷۸۹
✅ مزایا: ساده و قابل فهم
❌ معایب: کندتر در متون بزرگ به دلیل چندین بار جایگزینی
روش سوم تبدیل اعداد فارسی پایتون: با List Comprehension یا Generator Expression
یک راه پایتونیک و تمیزتر با استفاده از comprehension:
def english_to_persian_comprehension(text):
digit_map = {'0': '۰', '1': '۱', '2': '۲', '3': '۳', '4': '۴',
'5': '۵', '6': '۶', '7': '۷', '8': '۸', '9': '۹'}
return ''.join(digit_map.get(ch, ch) for ch in text)
# مثال
print(english_to_persian_comprehension("12345"))
# خروجی: ۱۲۳۴۵
✅ مزایا: تمیز و قابل توسعه
❌ معایب: ممکن است برای کاربردهای ساده زیاد به نظر برسد
روش چهارم برای تبدیل اعداد به فارسی در Python: استفاده از کتابخانههای خارجی
persiantools
کتابخانه persiantools
مجموعهای از ابزارهای فارسی است؛ از جمله تبدیل اعداد.
نصب:
pip install persiantools
استفاده:
from persiantools import digits
print(digits.en_to_fa("Today is 2025-04-29"))
# خروجی: Today is ۲۰۲۵-۰۴-۲۹
✅ مزایا: آماده، دقیق، حرفهای
❌ معایب: نیاز به نصب کتابخانه
Babel
برای فرمتبندی
کتابخانه Babel برای بومیسازی و فرمتبندی اعداد، تاریخ و زبان عالی است.
نصب:
pip install babel
استفاده:
from babel.numbers import format_decimal
number = 123456
formatted = format_decimal(number, locale='fa_IR')
print(formatted)
# خروجی: ۱۲۳٬۴۵۶
✅ مزایا: پشتیبانی از جداکنندهها و فرمت دقیق
❌ معایب: وابسته به locale سیستم و سنگین برای کاربرد ساده
روش پنجم برای تبدیل اعداد به فارسی در Python: استفاده از تبدیل یونیکد
اعداد فارسی در یونیکد، ۱۷۲۸ عدد جلوتر از اعداد انگلیسی هستند. میتوان با این اختلاف، اعداد را بهصورت ریاضی تبدیل کرد:
def unicode_offset_conversion(text):
result = []
for ch in text:
if '0' <= ch <= '9':
result.append(chr(ord(ch) + 1728))
else:
result.append(ch)
return ''.join(result)
# مثال
print(unicode_offset_conversion("Call 0987654321"))
# خروجی: Call ۰۹۸۷۶۵۴۳۲۱
✅ مزایا: سریع، بدون نیاز به نگاشت
❌ معایب: کمتر خوانا برای توسعهدهنده
نکته اضافی برای تبدیل اعداد فارسی پایتون: تبدیل رشتههایی که شامل عدد هستند
اگر میخواهید فقط عددهای درون یک رشته (مثل HTML یا JSON) را تغییر دهید:
import re
def convert_embedded_numbers(text):
def convert(match):
return ''.join(str.maketrans('0123456789', '۰۱۲۳۴۵۶۷۸۹')[d] for d in match.group())
return re.sub(r'\d+', lambda m: english_to_persian_translate(m.group()), text)
# مثال
print(convert_embedded_numbers("In 2025, we will have 3 events."))
# خروجی: In ۲۰۲۵, we will have ۳ events.
موارد خاص و نکات مهم برای اعداد فارسی پایتون
- اعداد اعشاری: تمام روشها با تبدیل به رشته کار میکنند.
- ارز، درصد، جداکننده: برای نمایش دقیق باید دستی فرمت کنید یا از Babel استفاده شود.
- تفاوت ارقام عربی و فارسی: ارقام عربی متفاوت از ارقام فارسی هستند؛ مراقب جایگزینی اشتباه باشید.
- تبدیل برعکس: میتوان نگاشت را برعکس کرده و همین منطق را استفاده کرد.
جمعبندی تبدیل اعداد به فارسی در Python
تبدیل اعداد به فارسی شاید ساده بهنظر برسد، اما تأثیر زیادی بر تجربه کاربری دارد. در پایتون، چندین روش برای این کار وجود دارد:
روش | مناسب برای | توضیحات |
---|---|---|
str.translate() | سرعت | سریع و تمیز |
replace() | سادگی | قابل فهم |
dict.get() | انعطاف | مناسب متنهای ترکیبی |
persiantools | دقت | آماده و دقیق |
babel | فرمتبندی | پشتیبانی از جداکننده |
یونیکد | کارایی | بدون نیاز به map |
در انتخاب روش مناسب، به این موارد دقت کنید:
- اعداد کجا نمایش داده میشوند؟ (رابط کاربری؟ گزارش؟ لاگ؟)
- حجم داده چقدر است؟
- آیا فرمت خاصی مثل قیمت یا درصد نیاز دارید؟
هر نیازی که داشته باشید، یک راه پایتونی برای آن هست. حال که با اعداد فارسی پایتون آشنا شدید، می توانید دوره ی پایتون سایت ایوولرن را خریداری کنید.