تقنية

linecache في بايثون: هل قراءة السطر تعكس آخر تعديل للملف؟

قراءتان تعيدان السطر القديم رغم تغيير الملف
كتبنا bbb بدل a وزاد الحجم. [1] [2]

قد تقرأ نسخة قديمة رغم تعديل الملف. [1] [2]

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

تحتفظ linecache بأسطر مقروءة؛ إعادة getline وحدها لا تفحص التغيير. [1] [2]

  • نكتب a ثم نقرأ السطر. [1] [2]
  • نستبدله بـbbb مع تغيير الحجم. [1] [2]
  • القراءة الثانية تعيد a. [1] [2]
  • نفحص الملف بـcheckcache ثم نقرأ bbb. [1] [2]
  • اختبرنا 3.12.14؛ الملف مؤقت أنشأناه. [1] [2]

المثال

import linecache as c,tempfile as t
from pathlib import Path
with t.TemporaryDirectory() as d:
 p=Path(d)/'x'
 p.write_text('a\n')
 print(c.getline(str(p),1).strip())
 p.write_text('bbb\n')
 print(c.getline(str(p),1).strip())
 c.checkcache(str(p))
 print(c.getline(str(p),1).strip())

[1] [2]

المخرجات: a ثم a ثم bbb. [1] [2]

لماذا تتجدد القراءة؟

يفحص التنفيذ الحجم ووقت التعديل؛ اختلاف أحدهما يزيل المدخل القديم. [1] [2]

بعد الفحص تجلب القراءة التالية الأسطر الجديدة. [1] [2]

القراءة بعد فحص الكاش تعيد السطر الجديد
الفحص يزيل المدخل؛ القراءة التالية تجلب السطر. [1] [2]

حدود النتيجة

غيّرنا الحجم عمدًا؛ ليست ضمانًا لاكتشاف كل تعديل. تخفي strip نهاية السطر للعرض. [1] [2]

المراجع

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

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