Persian
A fast Python toolkit for Persian (Farsi) text normalization, number/character conversion, and localization utilities.
Installation
pip install persian
Quick Start
import persian
persian.convert_ar_characters("علي") # 'علی'
persian.convert_fa_numbers("۱۳۷۱") # '1371'
persian.convert_en_numbers("345") # '۳۴۵'
persian.convert_en_characters("sghl") # 'سلام'
persian.convert_fa_spaces("آمده ای") # 'آمدهای'
persian.decode_url("https://.../%D8%B5%D9%81%D8%AD%D9%87") # 'https://.../صفحه'
Need a one-stop helper? Use normalize_persian("سلام ٣٤٥ می آیم")
to get سلام ۳۴۵ میآیم.
Performance
Version 1.0.0 includes major speedups:
- 3–5× faster number and keyboard conversions via
str.translate - 2–3× faster spacing fixes using pre-compiled regular expressions
- ~50% lower memory usage on large strings thanks to fewer temporary objects
See docs/PERFORMANCE.md for benchmark methodology and charts.
Type Safety & Tooling
The package ships with native type hints (py.typed) and strict type checking.
Static analyzers know the exact return type of every function:
from persian import convert_en_numbers
result: str = convert_en_numbers("123") # ✔️ type checker is satisfied
Error Handling
All public functions validate inputs and raise clear exceptions:
import persian
persian.convert_en_numbers(None) # ValueError: input_str cannot be None
persian.convert_en_numbers(123) # TypeError: input_str must be str, got int
Empty strings are accepted and return empty strings.
API Overview
| Category | Functions |
|---|---|
| Numbers | convert_en_numbers, convert_fa_numbers, convert_ar_numbers |
| Characters | convert_en_characters, convert_ar_characters, remove_arabic_diacritics |
| Spacing & URLs | convert_fa_spaces, decode_url |
| Utilities | normalize_persian, contains_persian_digits, contains_arabic_digits, is_persian_text |
A detailed description is available in docs/API.md.
Deprecated Functions
CamelCase helpers remain available but emit DeprecationWarning:
enToPersianNumb()→convert_en_numbers()enToPersianChar()→convert_en_characters()arToPersianNumb()→convert_ar_numbers()arToPersianChar()→convert_ar_characters()
Documentation
Contributors
Contributing
See docs/CONTRIBUTING.md for setup instructions and code style rules.
Metadata
Release files for persian 1.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| persian-1.1.1.tar.gz | 76.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| persian-1.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 85.7 kB
Release files / persian-1.1.1.tar.gz
| Download URL | persian-1.1.1.tar.gz |
|---|---|
| Size | 76.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
77606b8a4f2e427c1b4cb8e5af8cfaaf7ac13ab51cb3631b66b76c275c85075a
|
|
BLAKE2b-256 checksum How to use checksums |
1ad2a170f81fc443b5204fd2922097dfe99b756f8e8558b9379e30900d58386c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 6, 2026.
Transparency logRelease files / persian-1.1.1-py3-none-any.whl
| Download URL | persian-1.1.1-py3-none-any.whl |
|---|---|
| Size | 9.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a0aac87390698cccd238c97c8a5871cf60e3e954085c87fe5bdc4ffb1f3eadae
|
|
BLAKE2b-256 checksum How to use checksums |
aeec20dd8eb0d5979b9c0b2869b6bd7b3eb1440af63d340b580765c242ddd3b2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 6, 2026.
Transparency log