linecache --- دسترسی تصادفی به سطرهای متن

کد منبع: Lib/linecache.py


ماژول linecache به شما اجازه می‌دهد هر سطری را از یک پرونده منبع پایتون دریافت کنید، در حالی که تلاش می‌کند با استفاده از یک نهانگاه، حالت رایجی را که سطرهای زیادی از یک پرونده واحد خوانده می‌شوند، به‌صورت داخلی بهینه‌سازی کند. این ماژول توسط ماژول traceback برای بازیابی سطرهای منبع جهت گنجاندن در ردگیری پشته قالب‌بندی‌شده استفاده می‌شود.

از تابع tokenize.open() برای باز کردن پرونده‌ها استفاده می‌شود. این تابع از tokenize.detect_encoding() برای دریافت کدگذاری پرونده استفاده می‌کند؛ در نبود توکن کدگذاری، کدگذاری پرونده به‌طور پیش‌فرض UTF-8 است.

ماژول linecache توابع زیر را تعریف می‌کند:

linecache.getline(filename, lineno, module_globals=None)

سطر lineno را از پرونده‌ای به نام filename دریافت می‌کند. این تابع هرگز استثنایی را پرتاب نمی‌کند — در صورت بروز خطا، '' را برمی‌گرداند (برای سطرهایی که یافت می‌شوند، نویسه‌ی خط جدید پایانی گنجانده خواهد شد).

اگر filename نشان‌دهنده‌ی یک ماژول فریز (frozen module) باشد (با '<frozen ' شروع شود)، تابع تلاش خواهد کرد نام پرونده واقعی را از module_globals['__file__'] به دست آورد، مشروط بر اینکه module_globals برابر None نباشد.

اگر پرونده‌ای با نام filename یافت نشود، تابع ابتدا وجود یک __loader__ مطابق PEP 302 را در module_globals بررسی می‌کند. اگر چنین بارگذاری وجود داشته باشد و متد get_source را تعریف کرده باشد، آنگاه آن متد سطرهای منبع را تعیین می‌کند (اگر get_source() مقدار None برگرداند، آنگاه '' برگردانده می‌شود). در نهایت، اگر filename یک نام پرونده نسبی باشد، نسبت به ورودی‌های مسیر جستجوی ماژول، sys.path، جستجو می‌شود.

تغییر یافته در نسخه‌ی 3.14: پشتیبانی از filename در ماژول‌های فریزشده .

linecache.clearcache()

نهانگاه را پاک کنید. اگر دیگر به سطرهای پرونده‌هایی که پیش‌تر با getline() خوانده شده‌اند نیازی ندارید، از این تابع استفاده کنید.

linecache.checkcache(filename=None)

نهانگاه را از نظر اعتبار بررسی کنید. اگر پرونده‌های موجود در نهانگاه ممکن است روی دیسک تغییر کرده باشند و به نسخه‌ی به‌روزشده نیاز دارید، از این تابع استفاده کنید. اگر filename حذف شود، همه‌ی ورودی‌های نهانگاه بررسی می‌شوند.

linecache.lazycache(filename, module_globals)

جزئیات کافی درباره‌ی یک ماژول غیرمبتنی بر پرونده ثبت می‌شود تا امکان دریافت سطرهای آن بعداً از طریق getline() فراهم شود، حتی اگر module_globals در فراخوانی بعدی None باشد. این کار از انجام I/O تا زمانی که سطری واقعاً مورد نیاز باشد جلوگیری می‌کند، بدون اینکه لازم باشد متغیرهای سراسری ماژول به‌طور نامحدود همراه نگه داشته شوند.

اضافه شده در نسخه‌ی 3.5.

مثال:

>>> import linecache
>>> linecache.getline(linecache.__file__, 8)
'import sys\n'