linecache --- Truy cập ngẫu nhiên vào dòng văn bản

Source code: Lib/linecache.py


Mô-đun linecache cho phép người dùng lấy bất kỳ dòng nào từ tệp nguồn Python, đồng thời cố gắng tối ưu hóa nội bộ bằng cách sử dụng bộ đệm, trường hợp phổ biến là nhiều dòng được đọc từ một tệp. Điều này được mô-đun traceback sử dụng để truy xuất các dòng nguồn để đưa vào truy nguyên được định dạng.

Chức năng tokenize.open() được sử dụng để mở tập tin. Hàm này sử dụng tokenize.detect_encoding() để lấy mã hóa tệp; trong trường hợp không có mã thông báo mã hóa, mã hóa tệp mặc định là UTF-8.

Mô-đun linecache xác định các chức năng sau:

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

Nhận dòng lineno từ tệp có tên filename. Hàm này sẽ không bao giờ đưa ra ngoại lệ --- nó sẽ trả về '' khi có lỗi (ký tự kết thúc dòng mới sẽ được đưa vào cho các dòng được tìm thấy).

Nếu filename biểu thị mô-đun bị đóng băng (bắt đầu bằng '<frozen '), hàm sẽ cố lấy tên tệp thực từ module_globals['__file__'] nếu module_globals không phải là None.

Nếu không tìm thấy tệp có tên filename, trước tiên, hàm này sẽ kiểm tra PEP 302 __loader__ trong module_globals. Nếu có một trình tải như vậy và nó xác định phương thức get_source thì nó sẽ xác định các dòng nguồn (nếu get_source() trả về None thì '' sẽ được trả về). Cuối cùng, nếu filename là tên tệp tương đối, nó sẽ được tra cứu tương ứng với các mục trong đường dẫn tìm kiếm mô-đun, sys.path.

Thay đổi trong phiên bản 3.14: Hỗ trợ filename của các mô-đun bị đóng băng.

linecache.clearcache()

Xóa bộ nhớ đệm. Sử dụng chức năng này nếu bạn không còn cần các dòng từ các tệp đã đọc trước đó bằng getline().

linecache.checkcache(filename=None)

Kiểm tra tính hợp lệ của bộ đệm. Sử dụng chức năng này nếu các tệp trong bộ nhớ đệm có thể đã thay đổi trên đĩa và bạn yêu cầu phiên bản cập nhật. Nếu filename bị bỏ qua, nó sẽ kiểm tra tất cả các mục trong bộ đệm.

linecache.lazycache(filename, module_globals)

Ghi lại đủ chi tiết về mô-đun không dựa trên tệp để cho phép nhận các dòng của nó sau qua getline() ngay cả khi module_globalsNone trong lệnh gọi sau. Điều này tránh thực hiện I/O cho đến khi thực sự cần một dòng mà không cần phải mang mô-đun toàn cục đi khắp nơi vô thời hạn.

Added in version 3.5.

Ví dụ:

>>> nhập linecache
>>> linecache.getline(linecache.__file__, 8)
'nhập hệ thống\n'