🔬
🧬
🔭
🪐
🧪
← डैशबोर्ड पर वापस जाएँ
Font Size:

1. परिचय

जब हम किसी प्रोग्राम में डेटा दर्ज करते हैं तो वह प्रोग्राम समाप्त होते ही नष्ट हो जाता है। यदि हम डेटा को स्थायी रूप से संग्रहीत करना चाहते हैं तो हमें उसे फाइल में सहेजना आवश्यक होता है। फाइल हैंडलिंग (File Handling) वह प्रक्रिया है जिसके द्वारा हम कंप्यूटर की मेमोरी में संग्रहीत फाइलों को पढ़ते (read), लिखते (write), अपडेट करते और सुधारते (append/update) हैं। पाइथन में फाइल हैंडलिंग के लिए अंतर्निहित (built-in) फलन open() का उपयोग किया जाता है। फाइल हैंडलिंग की सहायता से हम डेटा को रैम (RAM) के बजाय हार्ड डिस्क जैसे स्थायी भंडारण माध्यम में रख सकते हैं, जिससे डेटा प्रोग्राम समाप्त होने के बाद भी सुरक्षित रहता है।

फाइल में काम करने की प्रक्रिया को तीन मुख्य चरणों में विभाजित किया जा सकता है: पहला, फाइल को खोलना (open); दूसरा, फाइल पर आवश्यक कार्य करना (read/write); और तीसरा, फाइल को बंद करना (close)। फाइल को बंद न करने से डेटा हानि या मेमोरी रिसाव हो सकता है।

2. फाइल खोलना और बंद करना (open और close)

पाइथन में फाइल खोलने के लिए open() फलन का उपयोग किया जाता है। इसका सामान्य सिंटैक्स है:

file_object = open("filename", "mode")

जहाँ file_object फाइल के साथ संवाद करने का माध्यम है और mode यह निर्धारित करता है कि फाइल को किस उद्देश्य से खोलना है। फाइल को बंद करने के लिए close() विधि का उपयोग किया जाता है:

f = open("data.txt", "r")
# फाइल पर कार्य
f.close()

फाइल खोलने के मुख्य मोड:

मोड अर्थ कार्य
r read (पढ़ना) केवल पढ़ने के लिए; यदि फाइल नहीं है तो त्रुटि
w write (लिखना) लिखने के लिए; फाइल की पुरानी सामग्री मिट जाती है
a append (जोड़ना) फाइल के अंत में नया डेटा जोड़ता है
r+ read/write पढ़ने और लिखने दोनों के लिए
w+ read/write पढ़ने और लिखने के लिए, पुराना डेटा मिट जाता है
a+ read/append पढ़ने और अंत में जोड़ने के लिए

टेक्स्ट और बाइनरी मोड

टेक्स्ट मोड (डिफ़ॉल्ट) में डेटा वर्णों (characters) के रूप में संग्रहीत होता है, जबकि बाइनरी मोड में डेटा बाइट्स के रूप में संग्रहीत होता है। बाइनरी मोड के लिए मोड के साथ b जोड़ा जाता है, जैसे rb, wb, ab। बाइनरी मोड का उपयोग चित्र, ऑडियो, वीडियो जैसी फाइलों के लिए किया जाता है।

3. टेक्स्ट फाइल से पढ़ना (Reading from Text File)

टेक्स्ट फाइल से डेटा पढ़ने के लिए पाइथन कई विधियाँ प्रदान करता है:

3.1 read() विधि

read() विधि फाइल की पूरी सामग्री को एक स्ट्रिंग के रूप में लौटाती है। इसमें वर्णों की संख्या भी निर्दिष्ट की जा सकती है:

f = open("data.txt", "r")
content = f.read()        # पूरी फाइल
first10 = f.read(10)      # केवल 10 वर्ण
f.close()

3.2 readline() विधि

readline() विधि फाइल की एक पंक्ति पढ़कर लौटाती है। प्रत्येक कॉल पर अगली पंक्ति पढ़ी जाती है:

f = open("data.txt", "r")
line1 = f.readline()
print(line1)
f.close()

3.3 readlines() विधि

readlines() विधि फाइल की सभी पंक्तियों को सूची के रूप में लौटाती है, जिसमें प्रत्येक पंक्ति सूची का एक तत्व होती है:

f = open("data.txt", "r")
lines = f.readlines()
for line in lines:
    print(line.strip())
f.close()

3.4 पंक्ति-दर-पंक्ति पढ़ना

फाइल ऑब्जेक्ट एक इटरेटर के रूप में भी कार्य करता है, जिससे हम for लूप का उपयोग कर सकते हैं:

f = open("data.txt", "r")
for line in f:
    print(line, end="")
f.close()

4. टेक्स्ट फाइल में लिखना (Writing to Text File)

टेक्स्ट फाइल में डेटा लिखने के लिए write() और writelines() विधियों का उपयोग किया जाता है। लिखने के लिए फाइल को w, a या r+ मोड में खोलना आवश्यक है।

4.1 write() विधि

f = open("output.txt", "w")
f.write("नमस्ते पाइथन!\n")
f.write("यह दूसरी पंक्ति है।\n")
f.close()

ध्यान दें कि write() में हमें नई पंक्ति का वर्ण \n स्वयं जोड़ना पड़ता है।

4.2 writelines() विधि

lines = ["पंक्ति 1\n", "पंक्ति 2\n", "पंक्ति 3\n"]
f = open("output.txt", "w")
f.writelines(lines)
f.close()

writelines() सूची के सभी तत्वों को फाइल में लिख देता है, परंतु वह पंक्ति के अंत का वर्ण स्वतः नहीं जोड़ता।

4.3 append मोड

a मोड में फाइल के अंत में नया डेटा जुड़ता है, पुराना डेटा सुरक्षित रहता है:

f = open("log.txt", "a")
f.write("नया लॉग संदेश\n")
f.close()

5. फाइल से संबंधित अन्य महत्वपूर्ण विधियाँ और विशेषताएँ

5.1 with स्टेटमेंट (संदर्भ प्रबंधक)

with स्टेटमेंट की सहायता से फाइल को स्पष्ट रूप से बंद करने की आवश्यकता नहीं होती; ब्लॉक समाप्त होते ही फाइल स्वतः बंद हो जाती है:

with open("data.txt", "r") as f:
    content = f.read()
print(content)  # फाइल स्वतः बंद हो चुकी है

5.2 seek() और tell() विधियाँ

tell() विधि फाइल पॉइंटर की वर्तमान स्थिति (बाइट्स में) बताती है, और seek() विधि फाइल पॉइंटर को निर्दिष्ट स्थिति पर ले जाती है:

f = open("data.txt", "r")
print(f.tell())      # 0
data = f.read(5)
print(f.tell())      # 5
f.seek(0)            # पॉइंटर को शुरुआत में
print(f.read(3))
f.close()

5.3 os मॉड्यूल के फलन

फाइल के बारे में जानकारी प्राप्त करने के लिए os मॉड्यूल का उपयोग किया जा सकता है:

import os
print(os.path.getsize("data.txt"))   # फाइल का आकार बाइट्स में
print(os.path.exists("data.txt"))    # क्या फाइल मौजूद है

6. बाइनरी फाइल (Binary File)

बाइनरी फाइलों में डेटा बाइट्स के रूप में संग्रहीत होता है। इन फाइलों को पढ़ने और लिखने के लिए pickle मॉड्यूल का उपयोग किया जाता है। pickle पाइथन ऑब्जेक्ट को बाइनरी रूप में परिवर्तित करने (serialization) और उसे पुनः पाइथन ऑब्जेक्ट में परिवर्तित करने (deserialization) की सुविधा देता है।

6.1 pickle में डेटा लिखना

import pickle

data = {"नाम": "राहुल", "अंक": 95}
with open("record.dat", "wb") as f:
    pickle.dump(data, f)

dump() विधि पाइथन ऑब्जेक्ट को बाइनरी फाइल में लिखती है।

6.2 pickle से डेटा पढ़ना

import pickle

with open("record.dat", "rb") as f:
    data = pickle.load(f)
print(data)

load() विधि बाइनरी फाइल से पाइथन ऑब्जेक्ट को पुनः प्राप्त करती है।

7. सीएसवी फाइल (CSV File)

सीएसवी (Comma Separated Values) फाइलों में डेटा अल्पविराम द्वारा अलग किए गए रूप में संग्रहीत होता है। इनके लिए csv मॉड्यूल का उपयोग किया जाता है:

import csv

with open("marks.csv", "w", newline="") as f:
    writer = csv.writer(f)
    writer.writerow(["नाम", "अंक"])
    writer.writerow(["अनु", 85])

with open("marks.csv", "r") as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

त्वरित पुनरावृत्ति तालिकाएँ

फाइल खोलने के मोड

मोड विवरण फाइल न होने पर
r केवल पढ़ना त्रुटि
w केवल लिखना (पुराना मिटता है) नई फाइल बनती है
a अंत में जोड़ना नई फाइल बनती है
r+ पढ़ना + लिखना त्रुटि
w+ पढ़ना + लिखना (पुराना मिटता है) नई फाइल बनती है
a+ पढ़ना + जोड़ना नई फाइल बनती है

फाइल पढ़ने/लिखने की विधियाँ

विधि कार्य लौटाता है
read(n) n वर्ण पढ़ना स्ट्रिंग
readline() एक पंक्ति पढ़ना स्ट्रिंग
readlines() सभी पंक्तियाँ सूची
write(s) स्ट्रिंग लिखना वर्णों की संख्या
writelines(list) सूची लिखना कोई नहीं
tell() पॉइंटर स्थिति पूर्णांक
seek(n) पॉइंटर को n पर ले जाना कोई नहीं

माइंड मैप

flowchart TD A["फाइल हैंडलिंग"] --> B["फाइल खोलना open()"] A --> C["पढ़ना"] A --> D["लिखना"] A --> E["फाइल के प्रकार"] B --> B1["मोड: r, w, a, r+, w+, a+"] B --> B2["with स्टेटमेंट"] C --> C1["read()"] C --> C2["readline()"] C --> C3["readlines()"] D --> D1["write()"] D --> D2["writelines()"] E --> E1["टेक्स्ट फाइल"] E --> E2["बाइनरी फाइल (pickle)"] E --> E3["सीएसवी फाइल (csv)"]

महत्वपूर्ण आरेख (SVG)

आरेख 1: फाइल हैंडलिंग प्रक्रिया

open() फलन पढ़ना (Read) r, r+, a+ मोड लिखना (Write) w, w+, a मोड अपडेट (Update) r+, w+ मोड read/readline/readlines write/writelines seek/tell close() विधि द्वारा फाइल बंद करना स्वर्ण नियम: हर खोली गई फाइल को बंद करें

आरेख 2: फाइल के प्रकार

फाइल के प्रकार टेक्स्ट फाइल .txt, .csv, .py बाइनरी फाइल .dat, .pickle, .jpg सीएसवी फाइल .csv (comma separated) विधियाँ read(), write(),\nreadlines() pickle मॉड्यूल dump(), load()\n(serialization) csv मॉड्यूल reader(), writer(),\nDictReader() स्वर्ण नियम: मोड का चयन आवश्यकता के अनुसार करें

सामान्य गलतियाँ

  1. r मोड में लिखने की कोशिश: r मोड केवल पढ़ने के लिए है। इसमें लिखने पर UnsupportedOperation त्रुटि आती है; लिखने के लिए w या a मोड का उपयोग करें।
  2. w मोड का अत्यधिक उपयोग: w मोड में खोलते ही फाइल की सारी पुरानी सामग्री मिट जाती है। यदि डेटा जोड़ना है तो a मोड का उपयोग करना चाहिए।
  3. फाइल को बंद न करना: close() को भूलने से डेटा पूरी तरह से सहेजा नहीं जाता या मेमोरी लीक होती है। सबसे अच्छा है with स्टेटमेंट का उपयोग।
  4. \n नहीं जोड़ना: write() में पंक्ति समाप्ति का वर्ण \n स्वतः नहीं जुड़ता; इसे स्वयं जोड़ना आवश्यक है।
  5. writelines() का गलत उपयोग: writelines() के साथ भी प्रत्येक तत्व में \n होना आवश्यक है, अन्यथा सभी पंक्तियाँ एक साथ जुड़ जाती हैं।
  6. बाइनरी मोड में टेक्स्ट विधि का उपयोग: बाइनरी फाइल में readlines() आदि के स्थान पर pickle.load() और pickle.dump() का उपयोग करें।

परीक्षा युक्तियाँ

  1. सभी मोड (r, w, a, r+, w+, a+) के कार्य और फाइल न होने पर उनके व्यवहार को तालिका के रूप में याद करें।
  2. read(), readline() और readlines() के बीच अंतर लिखित रूप में स्पष्ट करने का अभ्यास करें।
  3. tell() और seek() वाले कोड के आउटपुट के प्रश्न बहुत पूछे जाते हैं, इसलिए उनके साथ अभ्यास करें।
  4. with open(...) as f: संरचना का उपयोग करना न भूलें, यह परीक्षा में पूर्ण अंक दिला सकती है।
  5. pickle में dump() लिखने और load() पढ़ने के लिए है - इनका आपस में मेल न करें।
  6. कोड लिखने के प्रश्नों में हमेशा फाइल खोलने से लेकर बंद करने तक की पूरी प्रक्रिया लिखें।

निष्कर्ष

फाइल हैंडलिंग पाइथन की एक अत्यंत महत्वपूर्ण क्षमता है जो डेटा को स्थायी रूप से संग्रहीत करने और पुनः प्राप्त करने की सुविधा प्रदान करती है। open() के माध्यम से फाइल को विभिन्न मोड में खोलकर हम टेक्स्ट, बाइनरी तथा सीएसवी फाइलों पर पढ़ने, लिखने और अपडेट करने के कार्य कर सकते हैं। read(), readline(), readlines(), write(), writelines(), seek() और tell() जैसी विधियाँ फाइल संचालन को सरल बनाती हैं। with स्टेटमेंट का उपयोग करके हम फाइल को स्वतः बंद कर सकते हैं, जो सर्वोत्तम अभ्यास है। बाइनरी फाइलों के लिए pickle तथा सीएसवी के लिए csv मॉड्यूल आवश्यक हैं। इन सभी अवधारणाओं का अभ्यास करके परीक्षा में अच्छे अंक प्राप्त किए जा सकते हैं।