كيفية تجريد الأحرف من سلسلة بايثون

افتراضيًا، تزيل دالة .strip() في بايثون المسافات من طرفي السلسلة. لإزالة أحرف مختلفة، يمكنك تمرير سلسلة نصية كمُعامل يُحدد مجموعة الأحرف المراد إزالتها. تُعد دالة .strip() مفيدة لمهام مثل تنظيف بيانات إدخال المستخدم، وتوحيد أسماء الملفات، وتجهيز البيانات للتخزين.

في هذا الدرس، ستستكشف الفروق الدقيقة لـ .strip() ودوال السلاسل النصية الأخرى في بايثون التي تتيح لك تجريد أجزاء من السلسلة. ستتعلم أيضًا الأخطاء الشائعة وتقرأ عن سيناريوهات عملية واقعية، مثل تنظيف مجموعات البيانات وتوحيد مدخلات المستخدم. لتحقيق أقصى استفادة من هذا الدرس، يجب أن يكون لديك فهم أساسي لسلاسل بايثون وبيانات الأحرف.

كيفية استخدام دالة .strip() في بايثون لإزالة المسافات البيضاء من السلاسل

تُوفر دالة .strip() في بايثون طريقة سريعة وموثوقة لإزالة المسافات وعلامات التبويب وأحرف السطر الجديد غير المرغوب فيها من بداية ونهاية السلسلة النصية. هذا يجعلها مفيدة لمهام مثل:

  • التحقق من صحة إدخال المستخدم، مثل قطع المسافات من عناوين البريد الإلكتروني وأسماء المستخدمين والبيانات الأخرى التي يقدمها المستخدم.
  • تنظيف النصوص الفوضوية التي تم جمعها من خلال كشط الويب أو المصادر الأخرى.
  • إعداد البيانات للتخزين لضمان التوحيد قبل حفظ النص في قاعدة البيانات.
  • توحيد السجلات عن طريق إزالة المساحات غير المرغوب فيها.

إذا لم تقدم أي وسيطات للتابع، فإن .strip() تزيل جميع أحرف المسافات البادئة واللاحقة، تاركة أي مسافة بيضاء داخل السلسلة دون مساس:

>>> original_string = "   Hello, World!   "
>>> original_string.strip()
'Hello, World!'

عند استدعاء دالة .strip() على كائن نصي، يُزيل بايثون المسافات البادئة واللاحقة مع الحفاظ على المسافات بين الكلمات كما هي، كما في “Hello” و”World!”. تُعدّ هذه طريقة رائعة لتنقية بيانات النص دون التأثير على محتواه.

ومع ذلك، لا تقتصر المسافات البيضاء على المسافات فحسب، بل تشمل أيضًا أحرفًا شائعة مثل علامات الإضافة (\n) وعلامات الجدولة (\t). تظهر هذه الأحرف غالبًا عند التعامل مع سلاسل نصية متعددة الأسطر أو قراءة بيانات من ملفات. يؤدي استدعاء دالة .strip() افتراضيًا إلى إزالتها بفعالية أيضًا:

>>> text = """\n\t  This is a messy multi-line string.
...
...        \t    """
>>> text.strip()
'This is a messy multi-line string.'

هنا، تُزيل دالة .strip() جميع أحرف المسافات البادئة واللاحقة، بما في ذلك أسطر الإضافة وعلامات الجدولة، تاركةً محتوى النص فقط. بعد تنظيف سلاسل النصوص باستخدام .strip()، تصبح في حالة أفضل لعرض النص أو معالجته بشكل أكبر. يُعد هذا مفيدًا بشكل خاص عند التعامل مع بيانات مُهيكلة، مثل السجلات أو ملفات CSV، حيث تحتاج إلى معالجة العديد من السلاسل النصية على التوالي.

في هذه المرحلة، تكون قد تعلمت كيفية معالجة دالة .strip() لإزالة المسافات. ولكن ماذا لو كنت بحاجة لإزالة أحرف محددة، وليس فقط المسافات؟ في القسم التالي، ستتعلم كيفية استخدام هذه الطريقة لإزالة أي أحرف غير مرغوب فيها من بداية ونهاية السلسلة النصية.

إزالة أحرف معينة باستخدام .strip()

أحيانًا، قد تحتاج إلى إزالة أحرف معينة غير المسافات. على سبيل المثال، عندما يكون النص مُفصولًا برموز غير مرغوب فيها، أو عندما تحتاج إلى معالجة نص يعاني من مشاكل في التنسيق. يمكنك استخدام .strip() لإزالة أحرف معينة عن طريق تمرير هذه الأحرف كمعامل إلى الدالة:

cleaned_string = original_string.strip(chars=None)

هنا، chars هي وسيطة نصية يمكنك تمريرها إلى .strip(). إذا لم تمررها، فسيتم تعيينها افتراضيًا على None، مما يعني أن الدالة ستزيل المسافات.

بدلاً من ذلك، يمكنك تمرير قيمة سلسلة نصية تحتوي على جميع الأحرف التي تحتاج إلى إزالتها من طرفي السلسلة المستهدفة. لاحظ أن دالة .strip() لا تُعامل الوسيطة كبادئة أو لاحقة، بل كمجموعة من الأحرف الفردية المطلوب إزالتها. في بقية هذا القسم، ستستكشف حالات استخدام تمرير أحرف محددة إلى .strip() لتنظيف بداية ونهاية السلسلة.

تُعد دالة .strip() مفيدة عند الرغبة في إزالة علامات الترقيم، أو رموز معينة، أو أي أحرف غير مرغوب فيها. على سبيل المثال، في مهام تحليل المشاعر، قد تحتاج إلى إزالة علامات الاستفهام أو التعجب من بيانات النص:

>>> review = "!!This product is incredible!!!"
>>> review.strip("!")
'This product is incredible'

بما أنك تُمرّر “!” كمُعامل، فإن دالة .strip() تُزيل جميع علامات التعجب من طرفي السلسلة النصية مع الحفاظ على محتوى النص سليمًا. تذكّر أن دالة .strip() تُزيل جميع تكرارات الأحرف المُحدّدة دفعةً واحدة، وليس فقط أول حرف يظهر.

يمكنك أيضًا استخدام .strip() لإزالة عدة أحرف محددة من طرفي السلسلة. على سبيل المثال، قد تكون بعض مراجعات المنتجات التي تتعامل معها باللغة الإسبانية وتستخدم مزيجًا من علامات التعجب وعلامات التعجب المقلوبة:

>>> review = "¡¡¡Este producto es increíble!!!"
>>> review.strip("¡!")
'Este producto es increíble'

من خلال تمرير كلا الحرفين كحجة إلى .strip()، يقوم التابع فعليًا بإزالة جميع حالات ظهور “¡” أو “!” من بداية ونهاية السلسلة.

قد يكون هناك استخدام آخر يتمثل في توحيد أسماء المستخدمين قبل السماح لهم بالدخول إلى قاعدة البيانات الخاصة بك، على سبيل المثال، إزالة العلامات السفلية أو علامات التعجب أو الرموز الأخرى:

>>> submitted_username = "_!__Yo_JohnDoe!__!!"
>>> cleaned_username = submitted_username.strip("!_")
>>> cleaned_username
'Yo_JohnDoe'

تُنظّف دالة .strip() بداية ونهاية السلسلة النصية في خطوة واحدة. كما لاحظتَ، لا يُؤثّر ترتيب الأحرف التي تُمرّرها كمُعامل. تُعامل دالة .strip() الأحرف، أي المُعامل المُمرّر إليها، كمجموعة وليس كتسلسل، لذا لا يُؤثّر الترتيب.

في المثال أعلاه، يحتوي اسم المستخدم المُدخل على مزيج من الشرطات السفلية وعلامات التعجب في البداية والنهاية. يؤدي استدعاء دالة .strip() عليه مع تمرير “!_” كوسيطة إلى إزالة جميع هذه الأحرف من طرفي السلسلة.

كان بإمكانك أيضًا تبديل ترتيب الأحرف في الوسيطة، وتمرير “_!”، وستكون النتيجة هي نفسها:

>>> submitted_username = "_!__Yo_JohnDoe!__!!"
>>> submitted_username.strip("_!")
'Yo_JohnDoe'

تذكّر أن دالة .strip() في بايثون لا تتحقق من ترتيب الأحرف في الوسيطة أو النص. بل تحذف أيًا منها حتى تجد حرفًا غير موجود في المجموعة. هذا يجعل دالة .strip() أداة فعّالة لتنظيف بيانات النص دون القلق بشأن ترتيب الأحرف، ولكنها قد تُشكّل مشكلةً إذا افترضتَ أن الترتيب مهم!

مقارنة .strip() مع توابع Strip الأخرى في Python

يوفر بايثون عدة دوال لحذف الأحرف غير المرغوب فيها من بداية أو نهاية السلسلة. بينما تزيل دالة .strip() أي أحرف محددة من كلا الطرفين، تسمح دالة .lstrip() و.rstrip() بإزالة الأحرف المحددة من جانب واحد. بالإضافة إلى ذلك، تزيل دالة .removeprefix() و.removesuffix() سلاسل فرعية محددة من بداية أو نهاية السلسلة، على التوالي.

في هذا القسم، سوف تستكشف الاختلافات بين هذه التوابع ومتى تستخدم كل منها.

استخدم .lstrip() و.rstrip() لإزالة مجموعات الأحرف من جانب واحد

إذا كنتَ بحاجة إلى إزالة أحرف من جانب واحد فقط من سلسلة نصية، فاستخدم .lstrip() للبداية أو .rstrip() للنهاية. وكما هو الحال مع .strip()، تزيل هذه الدالة تكرارات فردية لمجموعة من الأحرف المحددة بدلاً من السلاسل الفرعية الكاملة، وتتوقف بمجرد مصادفة حرف غير موجود في المجموعة المحددة. باختيار الطريقة المناسبة، يمكنك تحديد ما إذا كنتَ تريد إزالة الأحرف من يسار السلسلة أم يمينها:

>>> filename = "mp3audio.mp3"

>>> filename.lstrip("3pm")
'audio.mp3'

>>> filename.rstrip("3pm")
'mp3audio.'

في المثال أعلاه، باستخدام دالة .lstrip() مع “3pm” كمُعامل، تُزيل جميع الأحرف الأولى “3” و”p” و”m” حتى تصل إلى “a”، مما يُنتج “audio.mp3”. من ناحية أخرى، باستخدام نفس المُعامل، تُزيل دالة .rstrip() هذه الأحرف من الجانب الأيمن من السلسلة، وتتوقف عند “.” وتُبقي “mp3audio”. لا شيء يُضاهي الاستماع إلى صوت MP3 أثناء احتساء كوب من الشاي في الساعة 3 مساءً!

ملاحظة: لا يهم ترتيب الأحرف في وسيطة السلسلة لأيٍّ من هاتين التابعين، تمامًا كما هو الحال مع .strip(). استخدم هذا المثال “3pm”، ولكن كان بإمكانك استخدام أي ترتيب لهذه الأحرف الثلاثة للحصول على نفس النتيجة.

من أجل سهولة القراءة، قد يكون من المعقول ترتيب الأحرف أبجديًا، كما في “3mp”، ولكن بما أن هذا ليس وقتًا من اليوم، في بعض الأحيان يجب أن يتخلى المنطق عن النكتة المتواضعة.

عند الحاجة إلى إزالة مجموعة من الأحرف من الجانب الأيسر أو الأيمن من سلسلة نصية، يُنصح باستخدام .lstrip() و.rstrip() بدلاً من .strip(). مع ذلك، تذكّر أن كلتا الطريقتين تزيلان مجموعات من الأحرف، ولا تفترض أنهما تزيلان تسلسلات أحرف محددة.

إذا كنت بحاجة إلى إزالة تسلسلات معينة، فيجب عليك العمل مع .removeprefix() و.removesuffix() بدلاً من ذلك.

إزالة البادئة باستخدام .removeprefix()

لنفترض أنك بحاجة إلى تنظيف مجموعة من أسماء الملفات لاحتوائها على بادئات تحتاج إلى إزالة. استخدام .strip() أو .lstrip() ليس الطريقة الصحيحة، لأن كلتا الطريقتين تزيلان تكرارات كل حرف في الوسيطة المُعطاة. لا تزيلان سلاسل فرعية كاملة.

>>> filename = "txt_transcript.txt"

>>> filename.strip("txt_")
'ranscript.'

في هذا المثال، يؤدي استخدام .strip() مع “txt_” إلى إزالة أي تكرارات سابقة أو لاحقة لـ “t” أو “x” أو ““، مما يُزيل هذه الأحرف بشكل فردي بدلاً من اعتبار “txt” تسلسلاً كاملاً. في الواقع، يُعدّ التكرار الثاني لـ “t” في الوسيطة غير ضروري، وقد يكون مؤشرًا على أن المطور لا يستخدم .strip() بشكل صحيح.

نتيجةً لذلك، يُرجع الكود ‘ranscript.’، مُزيلًا كلاً من البادئة “txt_”، وحرف t الإضافي، واللاحقة “txt” بعد النقطة. ربما لا يكون هذا هو المقصود من هذا الكود.

بدلاً من ذلك، يمكنك استخدام .removeprefix() لطريقة وصفية وفعّالة لإزالة بادئة من سلسلة بايثون. يزيل هذه التابع البادئة التي تُمررها كمعامل فقط، ومن بداية السلسلة فقط. لا تؤثر على أي أحرف أخرى.

>>> filename = "txt_transcript.txt"

>>> filename.removeprefix("txt_")
'transcript.txt'

هنا، يؤدي استدعاء دالة .removeprefix() على اسم الملف مع تمرير “txt_” كوسيطة إلى إزالة السلسلة الفرعية “txt_” من بداية السلسلة. ويترك كل شيء آخر دون تغيير، ويعيد ملف “transcript.txt” سليمًا ونظيفًا.

إذا لم تتطابق البادئة مع بداية السلسلة، فلن يحدث شيء:

>>> filename = "txt_transcript.txt"

>>> filename.strip("audio_")
'txt_transcript.txt'

في هذه الحالة، يبقى اسم الملف كما هو. بادئة “audio_” لا تتطابق مع بداية سلسلة اسم الملف.

يُوفر استخدام دالة .removeprefix() طريقةً أكثر موثوقيةً للتعامل مع أسماء الملفات المُهيكلة، أو إدخالات السجلات، أو النصوص المُنسّقة، حيث يلزم إزالة بادئة معروفة بشكلٍ واضح. كما تمنع هذه الدالة الحذف غير المقصود للأحرف، وتجعل الكود أسهل قراءةً وصيانةً. تحتوي بايثون أيضًا على دالة مُصاحبة، وهي .removesuffix()، تستهدف نهاية السلسلة النصية.

إزالة اللاحقة باستخدام .removesuffix()

بينما تعمل دالة .removeprefix() في بداية السلسلة النصية، تزيل دالة .removesuffix() سلسلة فرعية مطابقة من نهايتها. هذا مفيد لإزالة امتدادات الملفات، أو لاحقات السجلات، أو رموز الإصدارات. في المثال التالي، ستستخدم هذه الطريقة لإزالة امتداد .txt من اسم ملف، مع ترك الاسم الأساسي فقط:

>>> filename = "txt_transcript.txt"

>>> filename.removesuffix(".txt")
'txt_transcript'

استمرارًا للمثال السابق، ينتهي اسم الملف بـ “.txt”. عند تمرير “.txt” كمعامل إلى .removesuffix()، تحذف الدالة اللاحقة، وتبقى الاسم الأساسي فقط. إذا لم تتطابق اللاحقة مع نهاية السلسلة النصية، تُرجع الدالة السلسلة النصية الأصلية كما هي:

>>> filename.removesuffix(".mp3")
'txt_transcript.txt'

كما يوحي اسم التابع الوصفي، فإن دالة .removesuffix() تزيل السلاسل الفرعية من نهاية السلسلة فقط. وتترك السلسلة كما هي إذا لم تعثر على السلسلة الفرعية المُعطاة في نهايتها.

يمكن أن يؤدي استخدام .removesuffix() إلى تحسين جودة الكود عند الحاجة إلى إزالة امتدادات الملفات. ومع ذلك، عند العمل مع مسارات الملفات أو امتداداتها في الواقع، يُفضل استخدام وحدة pathlib في بايثون. تُطبّق هذه الوحدة نهجًا كائني التوجه لمعالجة الملفات، وصُممت فئة Path الخاصة بها خصيصًا للتعامل مع مسارات الملفات مع ضمان التوافق بين الأنظمة الأساسية.

على سبيل المثال، يمكنك استخدام .stem لاستخراج اسم الملف والتخلص من الامتداد:

>>> from pathlib import Path

>>> filename = "txt_transcript.txt"

>>> Path(filename).stem
'txt_transcript'

هنا، ستحصل على نفس النتيجة عند استخدام .removesuffix() وتمرير “.txt” كمعامل. تشير سمة .stem فقط إلى اسم الملف دون امتداده. بالإضافة إلى ذلك، يُعد هذا النهج أكثر مرونة لأنه يسمح لكودك بالعمل مع أي امتدادات ملفات، وليس فقط تلك التي تنتهي بـ .txt.

اختر الطريقة الصحيحة لإزالة الحروف

التابع .strip() هو تابع متعدد الاستخدامات لإزالة المسافات البيضاء والأحرف المحددة من طرفي السلسلة النصية. ومع ذلك، فهو ليس التابع الوحيد المتاح لإزالة الأحرف. بناءً على حالة استخدامك، عليك الاختيار بين .strip()، و.lstrip()، و.rstrip()، و.removeprefix()، و.removesuffix().

مع تعدد التوابع المتاحة لتجريد أجزاء من السلاسل، قد لا تعرف متى تستخدم أيها. في هذا القسم، ستستعرض سريعًا أفضل التوابع لاستخدامها. يمكنك الرجوع إلى الجدول أدناه كمرجع سريع:

التابعمثالالنتيجة
.strip()"--backup-1.log--".strip("-")"backup-1.log"
.lstrip()"--backup-1.log--".lstrip("-")"backup-1.log--"
.rstrip()"--backup-1.log--".rstrip("-")"--backup-1.log"
.removeprefix()"--backup-1.log--".removeprefix("-")"-backup-1.log--"
.removesuffix()"--backup-1.log--".removesuffix("-")"--backup-1.log-"

يلخص هذا الجدول ما يزيله كل تابع من سلسلة المثال “–backup-1.log–” إذا مررت شرطة واحدة (“-“) كحجة.

يجب عليك استخدام .strip() عندما تحتاج إلى إزالة أحرف فردية من كلا الطرفين، ولكن تأكد من تذكر كيفية عمل التابع لتجنب تجريد أحرف إضافية عن غير قصد!

إذا كنتَ بحاجة إلى مسح الأحرف من جانب واحد فقط، فإنّ دالتَي .lstrip() و.rstrip() يُمكنهما مساعدتكَ في تحديد الجانب الأيسر أو الأيمن من السلسلة. عند الحاجة إلى إزالة سلاسل فرعية مُحددة في البداية أو النهاية، يُفضّل استخدام .removeprefix() أو .removesuffix(). يُرجى ملاحظة أنّ أيّاً من هاتين الدالتين لا يُزيل الشرطة في منتصف السلسلة.

الآن بعد أن فهمت الاختلافات بين هذه الطرق، سيتناول القسم التالي الأخطاء الشائعة التي يجب تجنبها عند استخدام .strip().

تجنب الأخطاء الشائعة والحالات الحدية

مع أن دالة .strip() في بايثون قد تبدو واضحة، إلا أن استخدامها بشكل غير صحيح قد يؤدي إلى سلوك غير مقصود. في هذا القسم، ستوضح بعض المفاهيم الخاطئة المحتملة التي قد تنشأ عند استخدام دالة .strip().

إن تناول الموضوع من منظور الأخطاء المحتملة يُعزز فهمك وحدسك للعمل مع دالة .strip() ودوال السلاسل النصية ذات الصلة. ستتعلم أيضًا حلولًا بديلة لمواجهة هذه التحديات.

بافتراض أن .strip() يزيل كل المسافات البيضاء من السلسلة

من المفاهيم الخاطئة الشائعة أن دالة .strip() تزيل جميع المسافات، حتى من منتصف السلسلة. بدلاً من ذلك، تزيل فقط الأحرف من البداية والنهاية:

>>> spacy_text = "    Hello   ,      World !    "

>>> spacy_text.strip()
'Hello   ,      World !'

هنا، تُزيل دالة .strip() المسافات البادئة واللاحقة فقط. تبقى المسافة بين محتوى النص كما هي، وقد لا يكون هذا هو قصدك. إذا كان هدفك هو تطبيع المسافات البادئة في السلسلة بأكملها – مع إزالة المسافات الزائدة بين الكلمات أيضًا – فأنت بحاجة إلى نهج مختلف.

لإزالة المسافات الزائدة داخل السلسلة بشكل صحيح، يمكنك استخدام تابعيتي السلسلة .split() و.join() معًا:

>>> words = spacy_text.split()
>>> words
['Hello', ',', 'World', '!']

>>> " ".join(words)
'Hello , World !'

يضمن هذا النهج المكون من خطوتين دمج المساحات المتعددة في مساحة واحدة مع الحفاظ على بنية الجملة الإجمالية.

إذا كان هدفك هو إزالة جميع المسافات تمامًا، فإن تابع أخر مثل .replace() هو الأكثر ملاءمة:

>>> spacy_text.replace(" ", "")
'Hello,World!'

في هذا المثال، قمت باستبدال جميع حالات وجود حرف المسافة (” “) بسلسلة فارغة (“”)، مما أدى فعليًا إلى إزالة جميع المسافات من النص.

بافتراض أن .strip() يزيل تسلسلات أحرف محددة

يفترض المبرمجون غالبًا أن .strip(chars) يزيل تسلسلًا محددًا من الأحرف. لكنه في الواقع يزيل أيًا من الأحرف المحددة، بأي ترتيب! قد يؤدي هذا إلى نتائج غير متوقعة.

على سبيل المثال، قد ترغب في إزالة “ban” من banana ومحاولة استخدام .strip() لهذا الغرض بشكل غير صحيح:

>>> fruit = "banana"
>>> fruit.strip("ban")
''

في كتلة التعليمات البرمجية أعلاه، يمكنك أن ترى أن دالة .strip() لا تُعامل الوسيطة ككلمة كاملة أو تسلسل. يؤدي تمرير “ban” كوسيطة إلى إزالة جميع الأحرف “b” و”a” و”n” من كلا الجانبين، مما يؤدي إلى سلسلة نصية فارغة في هذه الحالة. بافتراض أن دالة .strip() تُزيل تسلسلات الأحرف، فقد يُعيقك ذلك عند التعامل مع أسماء الملفات، أو عند التعامل مع نصوص ذات بادئات أو لاحقات مُحددة، مثل وسوم HTML:

>>> html_tag = "<p>premium content</p>"
>>> html_tag.strip("<p>")
'remium content</'

هنا، أردتَ إزالة وسم <p> مع ذلك، فإن .strip("<p>") يزيل جميع أحرف “<” و”p” و”>” من بداية ونهاية السلسلة النصية. لا تتحقق الدالة من ترتيبها في الوسيطة أو في النص، بل تزيل أيًا منها حتى تجد حرفًا غير موجود في المجموعة. هذا يترك لك نصًا مقطوعًا بشكل غريب، وهو ليس بالضرورة نتيجة مميزة لخطة استخراج البيانات من الويب!

إذا كنت بحاجة إلى إزالة تسلسلات من الأحرف، فعليك استخدام .removeprefix() و.removesuffix(). يزيل هاذين التابعين النصتان التسلسلات الدقيقة بدلًا من مجموعة من الأحرف الفردية:

>>> fruit = "banana"
>>> fruit.removeprefix("ban")
'ana'

>>> html_tag = "&lt;p>premium content&lt;/p>"
>>> html_tag.removeprefix("&lt;p>").removesuffix("&lt;/p>")
'premium content'

تعمل دالة .removeprefix() على مسح بداية السلسلة النصية، وتحذف فقط التسلسل الدقيق للأحرف التي حددتها كبادئة. كما ترى، يتحقق دالة fruit.removeprefix(“ban”) مما إذا كانت السلسلة النصية “banana” تبدأ بـ “ban” وتحذفها، مما ينتج عنه “ana”.

في المثال الثاني، ربطتَ .removeprefix() و.removesuffix() معًا، ومرّرتَ إليهما وسمَي HTML الافتتاحي والختامي على التوالي. بهذه الطريقة، أزلتَ الوسمَين من البداية والنهاية، ولم يبقَ لكَ سوى نصّ المحتوى المميز لمواصلة العمل عليه.

عندما تحتاج إلى إزالة سلاسل فرعية بدلاً من مجموعات الأحرف، فاستخدم .removeprefix() و.removesuffix() بدلاً من .strip() أو .lstrip() أو .rstrip().

التعامل مع أحرف المسافات البيضاء غير الشائعة

تزيل دالة .strip() بعض أحرف المسافات فقط، مثل المسافات وعلامات الجدولة والأسطر الجديدة. صحيح أن هذه هي الأكثر شيوعًا، ولكن عندما يكون نصك من مصادر غير قياسية، فقد يتضمن أنواعًا أخرى من أحرف المسافات.

على سبيل المثال، قد يؤدي تحليل ملف PDF أو جلب محتوى من الويب إلى ظهور أحرف Unicode غير مرئية في سلاسل النصوص. في هذه الحالات، لا يمكنك الاعتماد على السلوك الافتراضي لـ .strip()، وستحتاج إلى إزالة هذه الأحرف صراحةً:

>>> text = "\u200b\u200b\u200bHello\u200b\u200b"

>>> print(text)
   ​​Hello​​  

>>> text.strip()
'\u200b\u200b\u200bHello\u200b\u200b'

يحتوي النص الذي تعمل عليه على عدة أحرف Unicode بمسافات عرض صفرية (U+200B). يمكنك أن ترى أنها جزء من السلسلة النصية، ولكن عند طباعتها، ستبدو لك كأي مسافة بيضاء عادية. مع ذلك، عند محاولة إزالة هذا النوع الغريب من المسافات البيضاء باستخدام الدالة .split() الافتراضية، ستلاحظ أنها لا تعمل.

بدلاً من ذلك، سيتعين عليك إزالة الحرف صراحةً عن طريق تمريره كحجة:

>>> text.strip("\u200b")
'Hello'

بينما تزيل دالة .strip() المسافات العادية وأحرف المسافات البيضاء الشائعة الأخرى، إلا أنها لا تزيل جميع الأحرف التي تُعرض كمسافات بيضاء. إذا كنت بحاجة إلى إزالة أحرف مثل U+200B، فعليك القيام بذلك صراحةً.

تطبيق .strip() على حالات الاستخدام في العالم الحقيقي

في هذه المرحلة، تعلمت كيفية عمل دالة .strip()، ومقارنتها بتوابع مشابهة، وبعض الأخطاء المحتملة التي يجب الانتباه لها. في هذا القسم، ستستكشف بعض حالات الاستخدام العملية – على سبيل المثال، قد ترغب في استخدام دالة .strip() لتنظيف مجموعات البيانات، أو تنسيق أسماء الملفات، أو تحضير مُدخلات المستخدم لمزيد من المعالجة.

دمج .strip() مع توابع سلسلة أخرى

في التطبيقات العملية، قد ترغب غالبًا في دمج دالة .strip() مع دوال نصية أخرى، مثل .lower() أو .replace() أو .split()، عند تنظيف البيانات وتوحيدها. تخيل أنك تعالج أسماء ملفات مستلمة من مصادر مختلفة، وتأتي بتنسيق غير متناسق. يوضح مقطع الكود المختصر أدناه كيفية دمج دالة .strip() مع دوال نصية أخرى لتوحيد أسماء الملفات:

>>> filename = "   Report_2025 FINAL.pdf  "
>>> filename.strip().lower().replace(" ", "_")
'report_2025_final.pdf'

في هذا المثال، تقوم .strip() بإزالة المسافات غير الضرورية، وتضمن .lower() الاتساق عن طريق تحويل النص إلى أحرف صغيرة، وتقوم .replace(" ", "_") بتوحيد المسافات المتبقية داخل اسم الملف على شكل شرطات سفلية.

هنا، قد تلاحظ أن ترتيب تسلسل التوابع أمر بالغ الأهمية للحصول على النتيجة المتوقعة. إذا استدعيت .replace() قبل .strip()، فستتداخل المسافات غير المرغوبة مع التحويل:

>>> filename.lower().replace(" ", "_").strip()
'___report_2025_final.pdf__'

هذه المرة، ستستدعي .lower() و.replace(" ", "_") قبل .strip(). بينما لا تزال .strip() تنتظر بدء العمل، استبدلت .replace() جميع المسافات – بما في ذلك المسافات البادئة واللاحقة – بعلامات سفلية. نظرًا لعدم وجود أي مسافات بادئة أو لاحقة متبقية، فلن يكون لـ .strip() أي تأثير، مما ينتج عنه السلسلة النصية النهائية “_report_2025_final.pdf“.

يوضح هذا أهمية ترتيب التوابع عند استخدام .strip() مع توابع أخرى للسلاسل النصية. قد تؤدي بعض التحويلات إلى جعل الخطوات اللاحقة غير ضرورية أو عديمة التأثير.

تنظيف البيانات باستخدام .strip()

في مجموعات البيانات الكبيرة، غالبًا ما تظهر تناقضات، مثل المسافات الزائدة أو علامات التبويب أو أحرف السطر الجديد، نتيجةً لأخطاء إدخال بشرية أو تصدير النظام أو استخراج البيانات. قد تحتوي أسماء العملاء في قاعدة البيانات على مسافات غير مقصودة، أو قد تحتوي رموز المنتجات من مصادر مختلفة على أسطر جديدة لاحقة.

تؤدي هذه التناقضات إلى عدم تطابق في عمليات البحث، أو دمج خاطئ للبيانات، أو تحليل غير صحيح. لضمان سلاسة العمليات، من الضروري تنظيف بياناتك قبل معالجتها.

إحدى الطرق الممكنة لمعالجة هذه المشكلات هي تطبيق دالة .strip() على كل صف في مجموعة البيانات لضمان تنسيق موحد لجميع السجلات. فيما يلي مثال لكيفية تطبيق دالة .strip() بكفاءة داخل فهم القائمة لتنظيف قائمة أسماء تحتوي على مسافات غير متسقة:

>>> data = ["  Alice ", " Bob  ", " Charlie\n", "\tDora"]
>>> cleaned_data = [name.strip() for name in data]
>>> cleaned_data
['Alice', 'Bob', 'Charlie', 'Dora']

في هذا المثال، تُزيل دالة .strip() المسافات البادئة واللاحقة من كل عنصر في البيانات، مما يُساعد على التخلص من التناقضات الناتجة عن المسافات الزائدة. في الواقع، يكفي استدعاء دالة .strip() واحد للتعامل مع المسافات البادئة، أو أحرف السطر الجديد، أو علامات التبويب دفعةً واحدة!

مع ذلك، مع أن دالة .strip() قد تكون مفيدة للتنظيف الأساسي كما هو موضح في هذا المثال، إلا أنها عادةً ما تكون مجرد خطوة واحدة في عملية تنظيف البيانات. قد تستمر مشكلات أخرى، مثل التنسيق غير المتناسق، أو القيم المفقودة، أو أنواع البيانات غير الصحيحة.

استخدم .strip() في خطوط الأنابيب الشرطية

تُستخدم خطوط الأنابيب الشرطية في معالجة البيانات عند الحاجة إلى التحقق من شروط محددة قبل المتابعة. تُعد دالة .strip() مفيدة بشكل خاص عند التعامل مع إدخالات المستخدم الاختيارية أو التحقق من الشروط في خط الأنابيب.

على سبيل المثال، يمكنك استخدام .strip() للتحقق من وجود إدخال مستخدم فارغ واتخاذ الخطوات التالية استنادًا إلى الشرط:

>>> user_input = "   "
>>> if not user_input.strip():
...     print("Empty input detected!")
...
Empty input detected!

يؤدي استدعاء دالة .strip() بدون وسيطات إلى إزالة جميع أحرف المسافات، وتتحقق العبارة الشرطية مما إذا كان المُدخل فارغًا. بما أن دالة ” “.strip() تُرجع سلسلة نصية فارغة، فإن هذا التحقق يُساعد في تصفية المُدخلات الفارغة أو التي تحتوي على مسافات فقط. بناءً على التحقق من هذا الشرط، يُمكنك اتخاذ خطوات إضافية مثل عرض رسالة خطأ، أو مطالبة المستخدم بإعادة إدخال المُدخل، أو الانتقال إلى المرحلة التالية من خط الأنابيب.

الآن بعد أن تعرفت على بعض الطرق الفعّالة لاستخدام دالة .strip()، يمكنك تطبيقها بثقة على مهام متنوعة، من تنظيف أسماء الملفات إلى توحيد مدخلات المستخدم. بدمجها مع دوال سلاسل نصية أخرى، تضمن أن تكون بياناتك نظيفة ومتناسقة وجاهزة لمزيد من المعالجة.

في هذا الدرس، تعمقتَ في وظائف دالة .strip() في بايثون وكيفية استخدامها لإزالة المسافات غير المرغوبة والأحرف المحددة من بداية ونهاية السلاسل النصية. وتعلمتَ كيفية مقارنة دالة .strip()

إن فهم كيفية استخدام دالة .strip() والتوابع المرتبطة بها بفعالية يُساعدك في معالجة النصوص. تُعد هذه التوابع أدواتٍ مفيدة لإعداد بيانات نصية واضحة ومتسقة، وهي مهمة أساسية في تحليل البيانات، ومعالجة الملفات، والتحقق من صحة مدخلات المستخدم.

مع استمرارك في العمل مع السلاسل النصية في بايثون، تذكر استخدام دالة .strip() بحذر. بفهم سلوكها وحدودها، يمكنك تجنب الأخطاء الشائعة وضمان تناسق بياناتك النصية. لقد وصلت إلى نهاية هذا الدرس.


اكتشاف المزيد من بايثون العربي

اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

Scroll to Top

اكتشاف المزيد من بايثون العربي

اشترك الآن للاستمرار في القراءة والحصول على حق الوصول إلى الأرشيف الكامل.

Continue reading