النصوص المتقدمة — هياكل البيانات
النصوص المتقدمة
تعلمت في دورة الأساسيات الفهرسة والتقطيع والدوال الأساسية. هنا نتعمق في معالجة النصوص الحقيقية: تنظيف إدخال المستخدم، وتحليل البيانات النصية، وتنسيق المخرجات.
مجموعات الدوال
| الهدف | الدوال |
|---|---|
| تغيير الحالة | 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اختبر فهمك