Kodax

النصوص المتقدمة — هياكل البيانات

النصوص المتقدمة

تعلمت في دورة الأساسيات الفهرسة والتقطيع والدوال الأساسية. هنا نتعمق في معالجة النصوص الحقيقية: تنظيف إدخال المستخدم، وتحليل البيانات النصية، وتنسيق المخرجات.

مجموعات الدوال

| الهدف | الدوال |

|---|---|

| تغيير الحالة | upper, lower, title, capitalize, swapcase |

| التنظيف | strip, lstrip, rstrip (تقبل أحرفاً محددة: strip(".,")) |

| البحث | find (ترجع -1)، index (ترمي خطأ)، count، startswith، endswith |

| الفحص | isdigit, isalpha, isalnum, isspace, isupper |

| التقسيم والدمج | split, rsplit, splitlines, join |

| الاستبدال | replace(old, new, count) |

join: عكس split

join تُستدعى على الفاصل وتأخذ قائمة نصوص:

words = ["تعلم", "Python", "اليوم"]
" ".join(words)    # 'تعلم Python اليوم'
", ".join(["أ", "ب"])

join أسرع وأوضح بكثير من جمع النصوص بـ + داخل حلقة. العناصر يجب أن تكون نصوصاً: ", ".join(map(str, [1, 2])).

split بذكاء

"a  b   c".split()        # ['a', 'b', 'c'] بدون وسيط: يقسم على أي مسافات
"a,b,,c".split(",")       # ['a', 'b', '', 'c']
"key=value=x".split("=", 1)  # ['key', 'value=x'] تقسيم مرة واحدة فقط

تنسيق متقدم بـ f-strings

| الصيغة | الناتج |

|---|---|

| f"{3.14159:.2f}" | 3.14 |

| f"{1234567:,}" | 1,234,567 |

| f"{0.256:.1%}" | 25.6% |

| f"{'x':>5}" | محاذاة لليمين في عرض 5 |

| f"{7:03d}" | 007 |

هذا مفيد لطباعة جداول منتظمة.

النصوص غير قابلة للتعديل

كل دالة ترجع نصاً جديداً. بناء نص كبير بإضافة أجزاء في حلقة s += part بطيء مع البيانات الكبيرة؛ اجمع الأجزاء في قائمة ثم "".join(parts).

مثال عملي: تنظيف إدخال

raw = "   Ahmed.ALI@Example.COM  "
email = raw.strip().lower()
user, domain = email.split("@")

تمرين

اكتب دالة تأخذ جملة وترجع قاموساً بعدد مرات ظهور كل كلمة، بعد تحويلها لأحرف صغيرة وحذف علامات الترقيم من أطراف الكلمات (strip(".,!?")).

text = "  Hello, Python World!  "

# إزالة المسافات
print(text.strip())   # "Hello, Python World!"
print(text.lstrip())  # "Hello, Python World!  "
print(text.rstrip())  # "  Hello, Python World!"

# التحويل
print("hello".upper())      # HELLO
print("HELLO".lower())      # hello
print("hello world".title()) # Hello World
print("hELLO".swapcase())   # Hello

# البحث
sentence = "Python is awesome and Python is fun"
print(sentence.find("Python"))      # 0 (أول موقع)
print(sentence.rfind("Python"))     # 23 (آخر موقع)
print(sentence.count("Python"))     # 2
print(sentence.find("Java"))        # -1 (غير موجود)

# التحقق
print("Hello".startswith("He"))     # True
print("Hello".endswith("lo"))       # True
print("abc123".isalnum())           # True
print("123".isdigit())              # True
print("abc".isalpha())              # True

# التقسيم والدمج
words = "one,two,three".split(",")
print(words)  # ['one', 'two', 'three']

joined = " - ".join(["أحمد", "محمد", "علي"])
print(joined)  # أحمد - محمد - علي

# الاستبدال
text = "I love Java"
print(text.replace("Java", "Python"))

# تقسيم متقدم
data = "name:age:city"
name, age, city = data.split(":")

# F-strings المتقدمة
name = "أحمد"
score = 95.5
print(f"{name:>10}")        # محاذاة يمين
print(f"{name:<10}")        # محاذاة يسار
print(f"{name:^10}")        # توسيط
print(f"{score:.1f}")       # 95.5
print(f"{score:08.2f}")     # 00095.50
print(f"{1000000:,}")       # 1,000,000
اختبر فهمك