File Management in Python – Part 2

File Management in Python हमें किसी File Content को Read करने के लिए कई तरह के Methods Provide करता है, लेकिन File Iterators, File के Content को Read करने के लिए सबसे Best होते हैं। क्‍योंकि इस तरीके में हम एक बार में File की केवल एक Line को One-by-One Read करते हैं, न कि पूरी File को। Files का स्‍वयं का भी एक Iterator होता है, जिसके परिणामस्‍वरूप for Loop, Comprehension या कई अन्‍य तरीकों से हमें एक बार में केवल एक ही Line को Read करने की सुविधा प्राप्‍त हो जाती है।

जब भी Python Program के माध्‍यम से किसी File के Content को Read किया जाता है, तो External File से Read होकर Python Program में आने वाला सारा Data String के रूप में ही आता है। इसलिए इस आने वाले String Data को हमें हमारी जरूरत के अनुसार अन्‍य Object Types में Manually Convert करना पड़ता है।

इसी‍ तरह से जब हम print() Operation Perform करते हैं, तब Python, String Content में किसी भी तरह की Formatting नहीं करता है न ही किसी अन्‍य प्रकार के Object को String Object में Convert करता है। इसलिए External File में किसी Object के Content को Write करने के‍ लिए भी सारा Conversion और Formatting का Task हमें Manually ही Perform करना पड़ता है और विभिन्‍न प्रकार के जरूरी Conversions के बारे में हम Core Types Chapter के अन्‍तर्गत काफी विस्‍तार से Discuss कर चुके हैं।

विभिन्‍न प्रकार के Generic Object Storage को Handle करने के लिए Python हमें pickle नाम का एक Advanced Standard Library Tool भी Provide करता है, जिसका प्रयोग करके हम File में Exist struct Module द्वारा Packed Binary Data के साथ भी Deal कर सकते हैं और JSON, XMLCSV Text के रूप में Exist Special Type के Content को भी Process कर सकते हैं।

Default रूप से Output Files हमेंशा Buffered रहता है, यानी हम हमारे Python Program के माध्‍यम से जो भी Content किसी File में Write करते हैं, वह Content तुरन्‍त Memory से Actual Disk Drive File में Transfer नहीं होता, बल्कि तब तक Memory में ही Stored रहता है, जब तक कि हम उस File को close() Method का प्रयोग करते हुए Close नहीं कर देते।

जब हम किसी File को Close करते हैं अथवा जब हम flush() Method का प्रयोग करते हुए File के Content को Flush करते हैं, तो Operating System हमारे File में Write होने वाले Buffered Content को Forcefully Actual Disk File में Write करके Buffer को Release कर देता है।

हम open() Function में एक Extra Parameter Pass करके इस Buffer होने की प्रक्रिया को रोक भी सकते हैं, लेकिन ऐसा करने से Program की Performance काफी प्रभावित होती है। इसलिए हमें ऐसा नहीं करना चाहिए।

Python की Files में हम Byte Offset Basis पर Randomly Access भी कर सकते हैं। हम हमारी जरूरत के अनुसार पूरी File में कहीं भी Traverse कर सकते हैं और किसी भी Content को कहीं भी Write कर सकते हैं अथवा कहीं से भी Read कर सकते हैं। और इस तरह से File के Content में Traverse करने के लिए हमें File Object के seek() Methods को Use करना होता है।

हालांकि Python में हम जब चाहें तब किसी भी File पर Read/Write Operation Complete होने के बाद उसे Close कर सकते हैं। लेकिन Python में File Close करने का काम Optional होता है। इसलिए यदि हम किसी File को Close नहीं करते हैं, तब भी Python का Garbage Collector Automatically हर Orphan Object की तरह ही File Object को भी Collect कर लेता है।

जब हम File Object के close() Method को Manually Call करते हैं, तब इस Method के Invoke होते ही हमारे Program का External Disk File से Connection Terminate हो जाता है और हमारे Program द्वारा जितने भी Resources को Hold किया गया होता है, उन्‍हें Operating System द्वारा Release कर दिया जाता है। साथ ही Memory Buffer में Exist सम्‍पूर्ण Content को ज्‍यों का त्‍यों Actual Disk File में Flush भी कर दिया जाता है।

इतना ही नहीं, यदि File को Close किए बिना किसी कारणवश Program Shutdown हो जाए, तो उस स्थिति में भी Python उस File Object के सारे Content को Underlying Disk File में Store करके File को Close कर देता है। जिसके परिणामस्‍वरूप File Object द्वारा Reserved Memory Space को Free करके Python के Garbage Collector द्वारा Collect कर लिया जाता है।

यानी किसी भी स्थिति में यदि किसी File Object को कोई Variable Reference न कर रहा हो, तो हर उस Orphan Object के लिए Reserved Memory को Python के Garbage Collector द्वारा Release कर दिया जाता है। इसलिए हमें कभी भी किसी File को Manually Close करने के लिए चिन्तित होना जरूरी नहीं होता।

फिर भी यदि हम अपनी प्रत्‍येक Open की गई File को Manually Close भी कर दें, तो भी कोई दिक्‍कत वाली बात नहीं है बल्कि ये एक Good Programming Practice है, जहां हम हमेंशा इस बात के लिए Sure हो सकते हैं कि किसी भी स्थिति में हमारे Program द्वारा Open की गई File Close हो ही जाएगी।

वास्‍तव में File का ये Auto-Close-On-Collection वाला Feature, Python के Language Definition का हिस्‍सा नहीं है, इसलिए भविष्‍य में कभी किसी कारणवश इसे बदला भी जा सकता है। इस स्थिति में यदि किसी कारणवश इस Feature को भविष्‍य के Python Version से Remove कर दिया गया, तो जिन भी Scripts में हमने Files को Manually Close नहीं किया होगा, उन Scripts में Error आना शुरू हो जाएगा।

इस तरह की स्थिति कभी भी पैदा न हो, इसीलिए जिस File को आपने Open किया है, उसे Manually Close कर देना ही Best Programming Practice है।

वास्‍तव में केवल CPython Implementation में ही Auto-Close-On-Collection का Feature उपलब्‍ध है। अन्‍य तरह के Python Implementation में किसी भी Open की गई File को Manually Close करना Compulsory है। इसलिए open() Function द्वारा Open की गई File को किसी भी तरह की दिक्‍कत से बचने के लिए हमेंशा close() Method का प्रयोग करते हुए Manually Close कर ही देना चाहिए।

इसके अलावा File को Compulsory रूप से Close कर देने के लिए हम with/as Statement का प्रयोग भी कर सकते हैं, जो इस बात की Guarantee देता है कि यदि File Open हुई है, तो जरूरत न रहने पर उसे Guaranteed रूप से Close भी कर ही दिया जाएगा।

Python in Hindi - BccFalna.comये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook Python in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी है, तो निश्चित रूप से ये EBook भी आपके लिए काफी उपयोगी साबित होगी।

Python in Hindi | Page: 602 | Format: PDF

BUY NOW GET DEMO REVIEWS