Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

การเข้าถึงบรรทัดข้อความแบบสุ่มใน Python (linecache)

วัตถุประสงค์ของโมดูล linecache ในไลบรารีมาตรฐานของ Python คือเพื่ออำนวยความสะดวกในการเข้าถึงบรรทัดใดๆ ในไฟล์ข้อความ แม้โมดูลนี้จะถูกใช้อย่างกว้างขวางโดยโมดูล traceback ของ Python เพื่อสร้าง stack trace ของข้อผิดพลาด เพิ่มเติมคือ prettyprints ของการอ่านถูกเก็บในแคช เพื่อประหยัดเวลาเมื่ออ่านบรรทัดซ้ำๆ

ฟังก์ชันสำคัญที่สุดในโมดูลนี้คือ getline() ซึ่งอ่านบรรทัดที่ระบุจากไฟล์ที่ให้มา รายการฟังก์ชันดังนี้:

getline(file, x)

ฟังก์ชันนี้คืนค่าบรรทัดที่ x จากไฟล์ หากไม่มีจะคืนค่าสตริงว่าง หากไฟล์ไม่อยู่ใน path ปัจจุบัน ฟังก์ชันจะพยายามค้นหาในไดเรกทอรีใน sys.path คือ module search path

clearcache()

หาก prettyprint ของ getline() ก่อนหน้าไม่จำเป็นอีกต่อไป สามารถล้างแคชด้วยฟังก์ชันนี้

checkcache()

ฟังก์ชันนี้ตรวจสอบว่าแคชยังถูกต้องหรือไม่ มีประโยชน์หากไฟล์ในแคชอาจถูกเปลี่ยนแปลงบนดิสก์

lazycache()

Seed แคชสำหรับ filename ด้วย module_globals โหลดโมดูลจะถูกขอ source เฉพาะเมื่อ getlines ถูกเรียก ไม่ใช่ทันที

getlines()

ฟังก์ชันนี้คืนค่าบรรทัดจากไฟล์ในรูปแบบลิสต์

updatecache()

ฟังก์ชันนี้อัปเดตรายการในแคชและคืนค่าลิสต์ของบรรทัด

เพื่อสาธิตการใช้งาน linecache เราสร้างไฟล์ข้อความเพื่อเก็บ Zen of Python (รายการหลักการซอฟต์แวร์ที่ ảnh hưởngถึงปรัชญาการออกแบบของ Python) Output ของ 'import this' ถูก redirect ไป zen.txt ด้วยโค้ด:

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()

เมื่อรันโค้ดด้านบน zen.txt จะถูกสร้างในไดเรกทอรีปัจจุบัน เราจะใช้ไฟล์ข้อความนี้อ่านบรรทัดด้วยฟังก์ชัน getline()

เพื่ออ่านบรรทัดที่ 4 จากไฟล์:

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

สังเกตว่าสตริงที่คืนค่าจบด้วยอักขระ newline

เพื่อแสดงหมายเลขบรรทัด 4 ถึง 10 ใช้ slice operator บนลิสต์ที่คืนจาก 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"]

ในบทความนี้เราเรียนรู้เกี่ยวกับโมดูล linecache ในไลบรารีมาตรฐานของ Python