Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Truy cập ngẫu nhiên các dòng văn bản trong Python (linecache)

Mục đích của module linecache trong thư viện chuẩn của Python là tạo điều kiện truy cập ngẫu nhiên vào bất kỳ tệp văn bản nào, mặc dù module này được sử dụng rộng rãi bởi module traceback của Python để tạo ngăn xếp theo dõi lỗi. Các bản in đẹp của việc đọc được giữ trong bộ nhớ cache để tiết kiệm thời gian khi đọc các dòng nhiều lần.

Hàm quan trọng nhất trong module này là getline() đọc một số dòng được chỉ định từ tệp cho trước. Dưới đây là danh sách các hàm:

getline(file, x)

Hàm này trả về dòng thứ x từ tệp. Nếu không có, nó sẽ trả về chuỗi rỗng. Nếu tệp không có trong đường dẫn hiện tại, hàm cố gắng định vị nó trong các thư mục trong sys.path – đường dẫn tìm kiếm module.

clearcache()

Nếu bản in đẹp của hàm getline() trước đó không còn cần thiết, bạn có thể xóa cache bằng hàm này.

checkcache()

Hàm này kiểm tra xem cache có hợp lệ không. Điều này hữu ích nếu các tệp trong cache có thể đã được thay đổi trên đĩa.

lazycache()

Khởi tạo cache cho tên tệp với module_globals. Bộ nạp module sẽ được yêu cầu nguồn chỉ khi getlines được gọi, không phải ngay lập tức.

getlines()

Hàm này trả về các dòng từ tệp dưới dạng đối tượng danh sách.

updatecache()

Hàm này cập nhật các mục cache và trả về danh sách các dòng.

Để minh họa sử dụng chức năng linecache, trước tiên chúng ta xây dựng một tệp văn bản để lưu trữ Zen of Python nổi tiếng (danh sách các nguyên tắc phần mềm ảnh hưởng đến triết lý thiết kế của Python). Đầu ra của import this được chuyển hướng tới zen.txt bằng mã sau:

import sys, io
zen = io.StringIO()
old_stdout = sys.stdout
sys.stdout = zen
import this
sys.stdout = old_stdout
f = open('zen.txt', 'w')
f.write(zen.getvalue())
f.close()

Khi mã trên được thực thi, zen.txt sẽ được tạo trong thư mục hiện tại. Chúng ta sẽ sử dụng tệp văn bản này để đọc các dòng từ nó với hàm getline().

Để đọc dòng thứ 4 từ tệp:

>>> linecache.getline('zen.txt', 4)
'Explicit is better than implicit.\n'

Lưu ý rằng chuỗi trả về kết thúc bằng ký tự xuống dòng.

Để hiển thị số dòng từ 4 đến 10, sử dụng toán tử slice trên danh sách được trả về bởi hàm getlines():

>>> linecache.getlines('zen.txt')[4:10]
['Simple is better than complex.\n',
 'Complex is better than complicated.\n',
 'Flat is better than nested.\n',
 'Sparse is better than dense.\n',
 'Readability counts.\n',
 "Special cases aren't special enough to break the rules.\n"]

Trong bài viết này chúng ta đã học về module linecache trong thư viện chuẩn Python.