समाधान
linecache मॉड्यूल कैश इम्प्लीमेंट करता है जो फाइलों की सामग्री को रखता है, जिसे अलग-अलग लाइनों में पार्स किया जाता है, मेमोरी में। linecache मॉड्यूल एक सूची में इंडेक्स करके लाइन/लाइनें लौटाता है, और बार-बार फाइल पढ़ने और वांछित लाइन खोजने के लिए लाइनों को पार्स करने पर समय बचाता है।
linecache मॉड्यूल बहुत उपयोगी है जब एक ही फाइल से कई लाइनों की तलाश होती है।
उदाहरण
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.
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)
# इप्सम डेटा के साथ फाइल बनाएं
filename = make_tempfile()
print(f"Output \n {filename}")
split_line = '\n'
# सोर्स से लाइनें चुनें
print(f"*** Displaying first 5 lines directly from the source \n {text.split(split_line)[4]}")
# कैश से वही लाइन चुनें
print(f" \n *** Displaying first 5 lines from the cache \n {linecache.getline(filename, 5)}")
# 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.
महत्वपूर्ण बिंदु: linecache मॉड्यूल द्वारा पढ़ी गई फाइलों के लाइन नंबर 1 से शुरू होते हैं, सूचियों के विपरीत जो 0 से इंडेक्सिंग शुरू करती हैं। यह याद रखने वाला एक महत्वपूर्ण बिंदु है।
खाली लाइनों को हैंडल करना
Linecache हमेशा लाइन के अंत में न्यूलाइन शामिल करता है। इसलिए, अगर लाइन खाली है, तो रिटर्न वैल्यू सिर्फ न्यूलाइन है।
import linecache
filename = make_tempfile()
print(f"Output \n {filename}")
# खाली लाइनें न्यूलाइन शामिल करती हैं
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)
आउटपुट: '\n'
निष्कर्ष
जब किसी एप्लिकेशन को फाइलों में रैंडम एक्सेस की आवश्यकता होती है, तो linecache लाइन नंबर द्वारा लाइनों को पढ़ना आसान बनाता है। फाइल की सामग्री कैश में बनाए रखी जाती है, इसलिए मेमोरी खपत से सावधान रहें।