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

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


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

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

getline(ไฟล์, x)

ฟังก์ชันนี้ส่งคืนบรรทัด xth จากไฟล์ หากไม่มีอยู่จะส่งคืนสตริงว่าง หากไฟล์ไม่มีอยู่ในเส้นทางปัจจุบัน ฟังก์ชันจะเชื่อมโยงกับตำแหน่งในไดเร็กทอรีใน sys.path ซึ่งเป็นเส้นทางการค้นหาโมดูล

clearcache()

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

checkcache()

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

lazycache()

เมล็ดพันธุ์แคชสำหรับชื่อไฟล์ด้วย module_globals ตัวโหลดโมดูลจะถูกถามถึงแหล่งที่มาเมื่อมีการเรียก getlines เท่านั้น ไม่ใช่ในทันที

getlines()

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

updatecache()

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

เพื่อสาธิตการใช้ฟังก์ชัน linecache ก่อนอื่นเราสร้างไฟล์ข้อความเพื่อจัดเก็บ Zen of Python ที่มีชื่อเสียง (รายการหลักการของซอฟต์แวร์ที่มีอิทธิพลต่อปรัชญาการออกแบบของ Python) ผลลัพธ์ของ 'นำเข้าสิ่งนี้' ถูกเปลี่ยนเส้นทางไปยัง 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'

โปรดทราบว่าสตริงส่งคืนจะลงท้ายด้วยอักขระขึ้นบรรทัดใหม่

หากต้องการแสดงหมายเลขบรรทัดตั้งแต่ 4 ถึง 10 ให้ใช้ตัวดำเนินการสไลซ์ในรายการที่ส่งคืนโดยฟังก์ชัน 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