Python/linecache/checkcache

من موسوعة حسوب

التابع linecache.checkcache

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

ملاحظة: في حال كون أحد الملفات مقروءًا بطريقة lazycache فإن هذا التابع لا يقوم بالتحقق من تغيره، بل يتركه كسولًا، حيث كُتبت الملاحظة التالية في شيفرة الوحدة linecache

if len(entry) == 1:
            # lazy cache entry, leave it lazy.
            continue

البنية العامة

linecache.checkcache(filename=None)

المعاملات

filename

اسم الملف المُراد التحقق من توافق محتواه في الكاش مع محتواه الحقيقي، في حال عدم تمرير قيمة هذا المُعامل فإن جميع الملفات الموجودة في الكاش يُتحقق من توافقها.

القيمة المعادة

None

أمثلة

يبين المثال التالي طريقة استخدام التابع:

>>> import linecache

>>> open('D:\\test.txt').readlines()#استعراض محتويات الملف قبل التعديل
['Hello World\n']

>>> linecache.getline('D:\\test.txt',1)#قراءة سطر باستخدام الوحدة المدروسة
'Hello World\n'

>>> linecache.cache#استعراض محتويات الكاش الحالية
{'D:\\test.txt': (13, 1535098568.2028332, ['Hello World\n'], 'D:\\test.txt')}

>>> with open('D:\\test.txt','a') as f:f.write('How are you!')#تعديل الملف
12

>>> linecache.getline('D:\\test.txt',1)
'Hello World\n'

>>> linecache.getline('D:\\test.txt',2)##نلاحظ عدم وصول الوحدة إلى الأسطر الجديدة بعد التعديل
''

>>> linecache.cache#ونلاحظ عدم تغير محتويات الكاش بعد
{'D:\\test.txt': (13, 1535098568.2028332, ['Hello World\n'], 'D:\\test.txt')}

>>> linecache.checkcache('D:\\test.txt')
>>> linecache.cache#نلاحظ أن محتويات الملف المُعدل قد حُذفت من الكاش
{}

>>> linecache.getline('D:\\test.txt',2)#والآن عند طلب قراءتها يتم إعادة تحديث محتويات الكاش بقراءة الملف من جديد
'How are you!\n'

>>> linecache.cache
{'D:\\test.txt': (25, 1535099138.4333844, ['Hello World\n', 'How are you!\n'], 'D:\\test.txt')}

انظر أيضًا

التابع المضمن open.

العبارة with في بايثون.

مصادر

صفحة التوثيق الرسمي للمكتبة linecache