البرمجة

تحقق Python 2.5.4: مشكلة في دالة endswith()

عندما تستخدم الدالة endswith() في Python 2.5.4 للتحقق مما إذا كانت السلسلة تنتهي بنمط محدد أم لا، قد تجد أحيانًا أن النتيجة غير المتوقعة قد تكون False على الرغم من أن النمط موجود في نهاية السلسلة. هذا يمكن أن يكون محيرًا، لكن السبب وراء هذا التصرف يمكن أن يكون مرتبطًا بكيفية عمل الدالة في هذه الإصدارة المحددة من Python.

السبب الرئيسي وراء ذلك هو أن الدالة endswith() في Python 2.5.4 تقوم بالتحقق من النمط بدءًا من نهاية السلسلة وتعيد False إذا كانت النمط لا يتطابق بالضبط مع النص في النهاية، حتى إذا كان النمط جزءًا من السلسلة ولكنه ليس في نهايتها.

في مثالك المعطى، عندما تقوم بفحص كل سطر في ملف “module.mk”، تقوم بالتحقق من نهاية السطر باستخدام i[-5:] للتأكد مما إذا كان النمط “.o ” موجودًا في نهاية السطر. ومع ذلك، الدالة endswith() لا ترى النمط “.o ” في نهاية السلسلة لأنه يبدأ بـ “.o ” وتستمر بالتحقق من الأحرف بشكل تصاعدي نحو البداية. وبما أن النمط “.o ” لا يتوافق بالضبط مع النهاية، فإنها تعيد قيمة False.

لتفادي هذه المشكلة، يمكنك استخدام طرق بديلة للتحقق من السلسلة، مثل استخدام الدالة rstrip() لإزالة الفراغات من نهاية السلسلة ومن ثم التحقق مباشرة من النمط:

python
ff = open("module.mk") f = ff.readlines() ff.close() for i in f: if i.rstrip().endswith('.o \\'): print "Is True for str: %s" % i

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

المزيد من المعلومات

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

اليك مثال باستخدام تعبيرات الاستدلال:

python
import re ff = open("module.mk") f = ff.readlines() ff.close() pattern = re.compile(r'\.o \\\s*$') # النمط ينتهي بـ ".o \" وبعدها فراغات ونهاية السلسلة for line in f: if pattern.search(line): print("True for str: %s" % line)

في هذا المثال، تم استخدام تعبير استدلالي يتطابق مع “.o ” بالإضافة إلى الفراغات الناتجة من السطر الذي يتوقف عند “\ “، مع نهاية السلسلة. هذا يحقق نفس الغرض مثل الطريقة السابقة لكن باستخدام التعبيرات العادية.

باستخدام أي من هذه الطرق، يمكنك تحقيق التحقق من السلسلة بطريقة أكثر دقة وثباتًا مما كان عليه باستخدام endswith() في Python 2.5.4.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

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