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

วิธีอ่านไฟล์ข้อความโดยใช้ LINECACHE ใน Python


วิธีแก้ปัญหา..

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

โมดูล lincecache มีประโยชน์มากเมื่อค้นหาหลายบรรทัดจากไฟล์เดียวกัน

เตรียมข้อมูลการทดสอบ คุณสามารถรับข้อความนี้โดยใช้ Google และค้นหาข้อความตัวอย่าง

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

เขาทำต่อไปอย่างสง่างาม ไม่ต้องกลัวว่าดึงออกง่ายจะเป็นรถ RVing สวยๆ ราวกับว่ามันเป็นความพยายามของผู้กลั่นแกล้ง ดูเหมือนว่าจะมาจากวัยรุ่นที่ดุร้าย หรือจากการโต้แย้งอื่น สัมผัสสองสัมผัสที่ zril ฉันเห็นด้วยกับแรงใดๆ เมื่อมองดูพวกมันได้

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

หรือแม้แต่เมืองก็ไม่เคยนึกถึง ดังนั้น ในความคิดของฉัน ไม่มีต่อเดือน ทั้งสองคนไม่สามารถช่วยเขาได้ มันขึ้นอยู่กับคุณที่จะได้ยินว่าคุณกำลังถูกต้นไม้อุ้ม ที่รัก และคุณไม่ต้องการที่จะถูกดึงลงจากรถ ฉันไม่เพียงแค่ต้องเป็นคนดีเท่านั้น แต่ยังสามารถทำการทดสอบได้อย่างแม่นยำอีกด้วย ให้ฉันถามคำถามของฉันเอง

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

ตัวอย่าง

import os
import tempfile

text = """
Lorem ipsum dolor sit amet, causae apeirian ea his, duo cu congue prodesset. Ut epicuri invenire duo, novum ridens eu has, in natum meliore noluisse sea. Has ei stet explicari. No nam eirmod deterruisset, nusquam electram rationibus ad sea, interesset delicatissimi et sit. Purto molestiae cu eum, in per hinc periculis intellegam.

Id porro facete cum. No est veritus detraxit facilisis, sit ea clita decore essent. Ut eam labores fuisset menandri, ex sit brute viderer eleifend, altera argumentum vel ex. Duo at zril sensibus, eu vim ullum assentior, quando possit at his.

Te nam tempor posidonium scripserit, eam mundi reprimique dissentias ne. Vim te soleat offendit democritum. Nam an diam elaboraret, quaeque dissentias an has. Autem legendos dignissim ad vis, sea ex amet petentium reprehendunt, inermis constituam philosophia ne mel. Esse noster lobortis usu ne.

Nec reque postea urbanitas ut, mea in nulla invidunt ocurreret. Ei duo iuvaret numquam. Ferri nemore audire te est, mel et detracto noluisse. Nec eu habeo justo, id pro posse apeirian volutpat. Mea sonet quaestio ne.

Atqui quaeque alienum te vim. Graeco aliquip liberavisse pro ut. Te similique reformidans usu, te mundi aliquando ius. Meis scripta minimum quo no, meis prima fabellas eu eam, laoreet delicata forensibus ut vim. Et quo vocibus mediocritatem, atqui summo an eam.

"""

1. สร้าง Function เพื่อสร้างไฟล์ชั่วคราวและลบทิ้งหลังการใช้งาน

def make_tempfile():
"""
Function: Create a temporary file.
mkstemp() and mkdtemp() to create temporary files and directories

args: None

return: Temp file name.
"""
fd, temp_file = tempfile.mkstemp()
os.close(fd)

with open(temp_file, 'wt') as f:
f.write(text)

return temp_file

def cleanup(temp_file):
os.unlink(temp_file)

3. อ่านบรรทัดเฉพาะโดยใช้ linecache หมายเลขบรรทัดของไฟล์ที่อ่านโดยโมดูล linecache เริ่มต้นด้วย 1 ซึ่งแตกต่างจากรายการที่เริ่มสร้างดัชนีอาร์เรย์จาก 0 นี่เป็นจุดสำคัญที่ต้องจำ

import os
import tempfile
import linecache

text = """
Lorem ipsum dolor sit amet, causae apeirian ea his, duo cu congue prodesset. Ut epicuri invenire duo, novum ridens eu has, in natum meliore noluisse sea. Has ei stet explicari. No nam eirmod deterruisset, nusquam electram rationibus ad sea, interesset delicatissimi et sit. Purto molestiae cu eum, in per hinc periculis intellegam.

Id porro facete cum. No est veritus detraxit facilisis, sit ea clita decore essent. Ut eam labores fuisset menandri, ex sit brute viderer eleifend, altera argumentum vel ex. Duo at zril sensibus, eu vim ullum assentior, quando possit at his.

Te nam tempor posidonium scripserit, eam mundi reprimique dissentias ne. Vim te soleat offendit democritum. Nam an diam elaboraret, quaeque dissentias an has. Autem legendos dignissim ad vis, sea ex amet petentium reprehendunt, inermis constituam philosophia ne mel. Esse noster lobortis usu ne.

Nec reque postea urbanitas ut, mea in nulla invidunt ocurreret. Ei duo iuvaret numquam. Ferri nemore audire te est, mel et detracto noluisse. Nec eu habeo justo, id pro posse apeirian volutpat. Mea sonet quaestio ne.

Atqui quaeque alienum te vim. Graeco aliquip liberavisse pro ut. Te similique reformidans usu, te mundi aliquando ius. Meis scripta minimum quo no, meis prima fabellas eu eam, laoreet delicata forensibus ut vim. Et quo vocibus mediocritatem, atqui summo an eam.
"""

def make_tempfile():
"""
Function: Create a temporary file.
mkstemp() and mkdtemp() to create temporary files and directories

args: None

return: Temp file name.
"""
directory = os.getcwd()
fd, temp_file = tempfile.mkstemp(dir=directory)
os.close(fd)

with open(temp_file, 'wt') as f:
f.write(text)

return temp_file

def cleanup(temp_file):
os.unlink(temp_file)

# Make a file with ipsum data.
filename = make_tempfile()
print(f"Output \n {filename}")

split_line = '\n'

# Pick the lines from source.

print(f"*** Displaying first 5 lines directly from the source \n {text.split(split_line)[4]}" )

# pick out the same line from cache
print(f" \n *** Displaying first 5 lines from the cache \n {linecache.getline(filename, 5)}" )

# cleanup the tempfile by using unlink
cleanup(filename)

ผลลัพธ์

C:\Users\sasan\PycharmProjects\blog\TutorialPoints\Updated_Code\tmpazax_yne
*** Displaying first 5 lines directly from the source
Id porro facete cum. No est veritus detraxit facilisis, sit ea clita decore essent. Ut eam labores fuisset menandri, ex sit brute viderer eleifend, altera argumentum vel ex. Duo at zril sensibus, eu vim ullum assentior, quando possit at his.

*** Displaying first 5 lines from the cache
Id porro facete cum. No est veritus detraxit facilisis, sit ea clita decore essent. Ut eam labores fuisset menandri, ex sit brute viderer eleifend, altera argumentum vel ex. Duo at zril sensibus, eu vim ullum assentior, quando possit at his.

4.Linecache รวมขึ้นบรรทัดใหม่ที่ท้ายบรรทัดเสมอ ดังนั้น ถ้าบรรทัดว่าง ค่าส่งกลับเป็นเพียงขึ้นบรรทัดใหม่

ดูด้านล่าง

import linecache

# Make a file with ipsum data.
filename = make_tempfile()
print(f"Output \n {filename}")

# Blank lines include the newline.

print(f"\n *** The number of lines in the text is 13." )
print(" \n *** Displaying the lastline from Linecache which should be a new line\n {!r}".format(linecache.getline(filename, 8)) )

cleanup(filename)

ผลลัพธ์

C:\Users\sasan\PycharmProjects\blog\TutorialPoints\Updated_Code\tmp352zirvn

*** The number of lines in the text is 13.

*** Displaying the lastline from Linecache which should be a new line
'\n'

5.บทสรุป - เมื่อแอปพลิเคชันต้องการการเข้าถึงไฟล์แบบสุ่ม linecache ทำให้ง่ายต่อการอ่านบรรทัดด้วยหมายเลขบรรทัด เนื้อหาของไฟล์ถูกเก็บไว้ในแคช ดังนั้นโปรดใช้หน่วยความจำอย่างระมัดระวัง