AD

Python File Handling से बनाएं अपना पहला Daily Expense Tracker: बिगिनर्स के लिए हैंड्स-ऑन गाइड

Python File Handling से बनाएं अपना पहला Daily Expense Tracker: बिगिनर्स के लिए हैंड्स-ऑन गाइड

जब आप कोडिंग सीखना शुरू करते हैं, तो सिंटैक्स याद करना या लूप्स चलाना तो आसान लगता है, लेकिन असली आत्मविश्वास तब आता है जब आप अपने कोड से कोई ऐसा टूल बनाते हैं जो असल जिंदगी में काम आए। अक्सर शुरुआती छात्र स्क्रीन पर 'Hello World' प्रिंट करने या केवल दो नंबर जोड़ने तक सीमित रह जाते हैं। प्रोग्राम बंद होते ही डेटा गायब हो जाता है, क्योंकि डेटा केवल कंप्यूटर की RAM में स्टोर होता है।

इसी समस्या को हल करने के लिए प्रोग्रामिंग में File Handling का उपयोग किया जाता है। इस ट्यूटोरियल में, हम बिल्कुल शुरुआत से सीखेंगे कि Python में फाइल्स को कैसे क्रिएट, राइट (Write), अपेंड (Append) और रीड (Read) किया जाता है। इसे केवल थ्योरी तक सीमित न रखकर, हम एक व्यावहारिक प्रोजेक्ट बनाएंगे—Daily Expense Tracker (दैनिक खर्च ट्रैकर)। यह प्रोजेक्ट आपके दैनिक खर्चों को एक टेक्स्ट फाइल में सुरक्षित रखेगा और कुल बजट का हिसाब भी देगा।

प्रोजेक्ट का विज़न और File Handling की बुनियादी बातें

Python में फाइल के साथ काम करने के लिए हमें किसी बाहरी लाइब्रेरी को इंस्टॉल करने की जरूरत नहीं होती। Python का इनबिल्ट open() फंक्शन यह काम आसानी से कर देता है। फाइल हैंडलिंग में मुख्य रूप से तीन मोड्स (Modes) का सबसे ज्यादा इस्तेमाल होता है:

  • 'w' (Write Mode): यह मोड नई फाइल बनाता है। अगर फाइल पहले से मौजूद है, तो यह उसके पुराने डेटा को मिटाकर (overwrite) नया डेटा लिखता है।
  • 'a' (Append Mode): यदि आप पुराने डेटा को सुरक्षित रखकर नया डेटा उसके अंत में जोड़ना चाहते हैं, तो यह मोड सबसे सुरक्षित है। हम अपने प्रोजेक्ट में इसी का उपयोग करेंगे।
  • 'r' (Read Mode): यह पहले से मौजूद फाइल से डेटा पढ़ने के लिए इस्तेमाल होता है।

सबसे सुरक्षित तरीका with open() स्टेटमेंट का उपयोग करना है। इसका फायदा यह है कि काम पूरा होते ही Python फाइल को अपने आप क्लोज (close) कर देता है, जिससे फाइल करप्ट होने या मेमोरी लीक होने का खतरा नहीं रहता।

स्टेप 1: नया खर्च दर्ज करने का फंक्शन तैयार करना

शुरुआत करते हैं एक ऐसा फंक्शन बनाकर जो यूजर से खर्च का विवरण (Item Name) और उसकी कीमत (Amount) पूछेगा, और फिर उसे एक फाइल expenses.txt में जोड़ देगा।

def add_expense():
    item = input("खर्च का नाम लिखें (जैसे: Coffee, Books): ").strip()
    try:
        amount = float(input("रुपये दर्ज करें: "))
    except ValueError:
        print("त्रुटि: कृपया सिर्फ नंबर दर्ज करें!")
        return

    # 'a' मोड का उपयोग करके डेटा जोड़ना
    with open("expenses.txt", "a", encoding="utf-8") as file:
        file.write(f"{item},{amount}\n")
    
    print(f"सफलतापूर्वक जोड़ा गया: {item} - ₹{amount}")

इस कोड में क्या हुआ?

  • हमने input() की मदद से आइटम का नाम और रकम ली।
  • try-except ब्लॉक लगाया ताकि अगर यूजर नंबर की जगह अक्षर टाइप कर दे, तो प्रोग्राम क्रैश न हो।
  • with open("expenses.txt", "a", encoding="utf-8") फाइल को अपेंड मोड में खोलता है।
  • हमने डेटा को item,amount के फॉर्मेट में लिखा ताकि बाद में इसे कॉमा (,) के आधार पर अलग करके पढ़ा जा सके।

स्टेप 2: सभी खर्चों को देखना और कुल योग (Total) निकालना

डेटा सेव करने के बाद, हमें एक ऐसा फंक्शन चाहिए जो फाइल को लाइन दर लाइन पढ़े, खर्चों की सूची स्क्रीन पर दिखाए और अंत में कुल खर्च जोड़कर बता दे।

def view_expenses():
    try:
        with open("expenses.txt", "r", encoding="utf-8") as file:
            lines = file.readlines()
    except FileNotFoundError:
        print("अभी तक कोई खर्च रिकॉर्ड नहीं किया गया है!")
        return

    if not lines:
        print("फाइल खाली है।")
        return

    total = 0.0
    print("\n--- आपके दैनिक खर्च की सूची ---")
    for line in lines:
        cleaned_line = line.strip()
        if cleaned_line:
            item, amount = cleaned_line.split(",")
            total += float(amount)
            print(f"• {item}: ₹{amount}")

    print("-----------------------------")
    print(f"कुल खर्च: ₹{total:.2f}\n")

इस कोड की मुख्य बातें:

  • यदि फाइल अभी तक बनी ही नहीं है और यूजर लिस्ट देखने की कोशिश करता है, तो FileNotFoundError कैच होता है और यूजर-फ्रेंडली मैसेज दिखता है।
  • readlines() फाइल की प्रत्येक लाइन को एक लिस्ट (List) में लोड करता है।
  • line.strip().split(",") प्रत्येक लाइन से एक्स्ट्रा स्पेस हटाकर कॉमा के जरिए नाम और रकम को अलग-अलग वेरिएबल्स में बांट देता है।

स्टेप 3: मेन्यू लूप तैयार करना (पूरा प्रोग्राम जोड़ें)

अब हम इन दोनों फंक्शन्स को एक while लूप में बांधेंगे ताकि यूजर जब तक चाहे तब तक नए खर्चे जोड़ सके या रिपोर्ट देख सके। नीचे इस प्रोजेक्ट का पूरा और फाइनल कोड दिया गया है:

def add_expense():
    item = input("खर्च का नाम लिखें: ").strip()
    try:
        amount = float(input("रुपये दर्ज करें: "))
    except ValueError:
        print("त्रुटि: कृपया सही संख्या दर्ज करें!")
        return

    with open("expenses.txt", "a", encoding="utf-8") as file:
        file.write(f"{item},{amount}\n")
    print(f"सफलतापूर्वक सेव हुआ: {item} (₹{amount})")

def view_expenses():
    try:
        with open("expenses.txt", "r", encoding="utf-8") as file:
            lines = file.readlines()
    except FileNotFoundError:
        print("\nकोई रिकॉर्ड नहीं मिला। पहले खर्च दर्ज करें!")
        return

    if not lines:
        print("\nफाइल खाली है!")
        return

    total = 0.0
    print("\n========== खर्च रिपोर्ट ==========")
    for index, line in enumerate(lines, start=1):
        cleaned = line.strip()
        if cleaned:
            item, amount = cleaned.split(",")
            total += float(amount)
            print(f"{index}. {item} - ₹{amount}")
    print("==================================")
    print(f"कुल खर्च: ₹{total:.2f}\n")

def main():
    while True:
        print("\n*** डेली एक्सपेंस ट्रैकर ***")
        print("1. नया खर्च जोड़ें")
        print("2. सभी खर्चे और कुल योग देखें")
        print("3. बाहर निकलें (Exit)")
        
        choice = input("अपना विकल्प चुनें (1/2/3): ").strip()
        
        if choice == "1":
            add_expense()
        elif choice == "2":
            view_expenses()
        elif choice == "3":
            print("ट्रैकर बंद हो रहा है। आपका दिन शुभ हो!")
            break
        else:
            print("अमान्य विकल्प! कृपया 1, 2 या 3 चुनें।")

if __name__ == "__main__":
    main()

शुरुआती छात्रों द्वारा की जाने वाली 3 आम गलतियां

जब छात्र पहली बार फाइल हैंडलिंग करते हैं, तो अक्सर इन गलतियों में फंस जाते हैं:

  • 'w' और 'a' मोड में भ्रम: डेटा जोड़ते समय गलती से 'w' मोड का उपयोग कर लेना। इससे हर बार पुराना सारा डेटा उड़ जाता है और सिर्फ नया इनपुट ही बचता है। हमेशा नए रिकॉर्ड के लिए 'a' (Append) का चयन करें।
  • फाइल क्लोज करना भूलना: अगर आप बिना with कीवर्ड के सीधे file = open(...) लिखते हैं और अंत में file.close() लगाना भूल जाते हैं, तो डेटा हार्ड ड्राइव पर राइट होने से रह सकता है।
  • डेटा टाइप कास्टिंग न करना: फाइल से पढ़ा गया हर डेटा स्ट्रिंग (String) होता है। यदि आप total += amount करेंगे तो Python एरर देगा। स्ट्रिंग को जोड़ने से पहले float(amount) या int(amount) में बदलना अनिवार्य है।

अगले कदम: इस प्रोजेक्ट को और बेहतर कैसे बनाएं?

इस बेसिक प्रोजेक्ट को सफलतापूर्वक चलाने के बाद, आप अपनी कोडिंग स्किल्स को अगले लेवल पर ले जाने के लिए इसमें ये फीचर्स जोड़ सकते हैं:

  1. तारीख (Date Stamp): Python के datetime मॉड्यूल का उपयोग करके हर खर्च के साथ वर्तमान तारीख और समय भी ऑटोमैटिक सेव करें।
  2. CSV फॉर्मेट: साधारण टेक्स्ट फाइल के बजाय Python की इनबिल्ट csv लाइब्रेरी का प्रयोग करें ताकि आप इस फाइल को सीधे Microsoft Excel या Google Sheets में खोल सकें।
  3. बजट अलर्ट: यूजर के लिए महीने का बजट तय करें और जैसे ही कुल खर्च उस बजट को पार करे, स्क्रीन पर लाल रंग में चेतावनी दिखाएं।

अक्सर पूछे जाने वाले सवाल (FAQ)

1. क्या इस प्रोग्राम को चलाने के लिए इंटरनेट कनेक्शन चाहिए?

नहीं, यह पूरी तरह से एक ऑफलाइन लोकल CLI (कमांड लाइन इंटरफेस) प्रोग्राम है जो आपके कंप्यूटर की लोकल डायरेक्टरी में टेक्स्ट फाइल बनाता है।

2. expenses.txt फाइल कंप्यूटर में कहां सेव होती है?

यह फाइल उसी फोल्डर (Directory) में बनती है जहां आपकी Python स्क्रिप्ट (.py फाइल) सेव है।

3. क्या encoding="utf-8" लिखना जरूरी है?

जी हां, यह एक बेस्ट प्रैक्टिस है। UTF-8 एन्कोडिंग सुनिश्चित करती है कि यदि आप खर्च के नाम में हिंदी, इमोजी या कोई विशेष सिंबल लिखते हैं, तो फाइल बिना किसी एरर के उसे सही ढंग से सेव कर सके।

4. क्या यह कोड Python के सभी वर्जन्स पर चलेगा?

यह कोड Python 3 के किसी भी आधुनिक वर्जन (Python 3.6 और उससे ऊपर) पर बिना किसी रुकावट के पूरी तरह काम करेगा।

Post a Comment

0 Comments