تقنية

fnmatch في بايثون: لماذا تختلف حالة الأحرف على ويندوز؟

مطابقة الاسم مع التطبيع وبدونه
لـLeaf.TXT مع *.txt على ويندوز. [1] [2]

حدد هل تريد تطبيع المنصة. [1] [2]

الخلاصة السريعة

في اختبار ويندوز، يطابق fnmatch حالة الاسم المختلفة؛ fnmatchcase يرفضها. [1] [2]

  • للاسم Leaf.TXT والنمط *.txt: الناتجان True وFalse بالترتيب. [1] [2]
  • fnmatch يطبق os.path.normcase على الاسم والنمط. [1] [2]
  • fnmatchcase يقارن بحساسية الحالة، دون هذا التطبيع. [1] [2]
  • النجمة في *.txt محرف بديل؛ ليس النمط تعبيرًا نمطيًا. [1] [2]
  • اختبرنا 3.12.14 على ويندوز ونصوص مؤلفة؛ المطابقة لا تثبت وجود ملف. [1] [2]

المثال

import fnmatch as f
s='Leaf.TXT'
print(f.fnmatch(s,'*.txt'))
print(f.fnmatchcase(s,'*.txt'))

[1] [2]

المخرجان هنا True ثم False. [1] [2]

سبب الاختلاف

في الاختبار يصير الاسم المطبع leaf.txt، ويبقى النمط *.txt؛ فتختفي مخالفة حالة الامتداد. [1] [2]

الاسم والنمط بعد تطبيع الاختبار
القيم المطَبّعة. [1] [2]

دون التطبيع، تختلف TXT عن txt. لا نعمم نتيجة الدالة الأولى على كل منصة. [1] [2]

النطاق

مررنا سلسلتين؛ لم نسرد مجلدًا أو نفتح ملفًا. اختر الدالة بحسب قاعدة الحالة المطلوبة. [1] [2]

المراجع

  1. Python: fnmatch / fnmatchcase
  2. CPython 3.12.14: fnmatch.py
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

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