Python में फ़ाइलों को कॉपी और मूव करना: shutil और os मॉड्यूल के साथ काम करना
Python में डेवलपमेंट के दौरान अक्सर फ़ाइलों और डायरेक्ट्रीज़ के साथ काम करना पड़ता है। बैकअप बनाना, यूज़र अपलोड को प्रोसेस करना, प्रोजेक्ट स्ट्रक्चर को व्यवस्थित करना, एप्लिकेशन डिप्लॉय करना — इन सभी कार्यों के लिए फ़ाइल सिस्टम को प्रोग्रामेटिक रूप से मैनेज करना ज़रूरी है। ऐसे ऑपरेशन को ऑटोमेट करने से डेटा मैनेजमेंट आसान हो जाता है और बार-बार मैन्युअल काम करने की ज़रूरत नहीं रहती।
Python का shutil मॉड्यूल फ़ाइलों और डायरेक्ट्रीज़ के साथ काम करने के लिए हाई-लेवल यूटिलिटीज़ प्रदान करता है। os मॉड्यूल के साथ मिलकर, यह फ़ाइल सिस्टम मैनेजमेंट के लिए एक शक्तिशाली क्रॉस-प्लेटफ़ॉर्म टूलसेट बनाता है। दोनों मॉड्यूल Python की स्टैंडर्ड लाइब्रेरी का हिस्सा हैं और बिना अतिरिक्त इंस्टॉलेशन के उपलब्ध हैं।
shutil मॉड्यूल का परिचय
shutil मॉड्यूल का नाम "shell utility" से लिया गया है और यह फ़ाइलों और डायरेक्ट्रीज़ के लिए हाई-लेवल ऑपरेशन के फंक्शन प्रदान करता है। मॉड्यूल के मुख्य फंक्शन इस प्रकार हैं:
copy()— मेटाडेटा को सहेजे बिना फ़ाइल कॉपी करनाcopy2()— पूरे मेटाडेटा के साथ फ़ाइल कॉपी करनाcopytree()— पूरी डायरेक्ट्री को रिकर्सिवली कॉपी करनाmove()— फ़ाइलों और फ़ोल्डरों को नई जगह पर मूव करनाrmtree()— डायरेक्ट्री और उसकी सामग्री को रिकर्सिवली डिलीट करनाcopyfileobj()— फ़ाइल ऑब्जेक्ट को बाइट-दर-बाइट कॉपी करना
shutil मॉड्यूल os मॉड्यूल के साथ प्रभावी रूप से इंटीग्रेट होता है और छोटे ऑटोमेशन स्क्रिप्ट से लेकर बड़े एंटरप्राइज़-लेवल एप्लिकेशन तक के लिए उपयुक्त है।
फ़ाइल कॉपी करने के तरीके
shutil.copy() के साथ बेसिक कॉपी करना
shutil.copy() फंक्शन बिना मेटाडेटा के फ़ाइल की सामग्री को सरलता से कॉपी करता है:
import shutil
source = 'source_folder/example.txt'
destination = 'destination_folder/example.txt'
shutil.copy(source, destination)
यह फंक्शन केवल फ़ाइल की सामग्री को कॉपी करता है। फ़ाइल के मेटाडेटा, जिसमें निर्माण तिथि, अंतिम संशोधन समय और एक्सेस अधिकार शामिल हैं, सहेजे नहीं जाते। यह फंक्शन Unix/Linux सिस्टम में एट्रीब्यूट फ्लैग के बिना cp कमांड के समान है।
याद रखें कि यदि लक्ष्य डायरेक्ट्री मौजूद नहीं है, तो एक एरर आएगी। लक्ष्य डायरेक्ट्री के अस्तित्व की पहले से जाँच करना या प्रोग्रामेटिक रूप से इसे बनाना अनुशंसित है।
मेटाडेटा के साथ कॉपी करना: shutil.copy2()
जब फ़ाइल की सभी जानकारी, जैसे टाइमस्टैम्प, मालिक और एक्सेस अधिकारों को सहेजना आवश्यक हो, तो copy2() फंक्शन का उपयोग करें:
shutil.copy2('file.txt', 'backup/file.txt')
यह विधि बैकअप बनाने, विभिन्न सिस्टमों के बीच प्रोजेक्ट माइग्रेट करने, या जब मूल फ़ाइल एट्रीब्यूट को संरक्षित करना महत्वपूर्ण हो, तब विशेष रूप से उपयोगी है। copy2() फंक्शन नए स्थान पर मूल फ़ाइल का सबसे सटीक पुनरुत्पादन सुनिश्चित करता है।
डायरेक्ट्री कॉपी करना
shutil.copytree() के साथ रिकर्सिव कॉपी करना
सभी नेस्टेड सबडायरेक्ट्रीज़ और फ़ाइलों के साथ पूरी डायरेक्ट्री को कॉपी करने के लिए copytree() फंक्शन का उपयोग किया जाता है:
shutil.copytree('old_project', 'new_project')
डिफ़ॉल्ट रूप से, copytree() फंक्शन FileExistsError एरर देता है यदि लक्ष्य डायरेक्ट्री पहले से मौजूद है। Python 3.8 से, ओवरराइट या सामग्री जोड़ने की अनुमति देने के लिए dirs_exist_ok=True पैरामीटर का उपयोग किया जा सकता है:
shutil.copytree('old_project', 'new_project', dirs_exist_ok=True)
यह फंक्शन रिकर्सिव रूप से काम करता है और निम्नलिखित परिदृश्यों में उपयोग किया जाता है:
- प्रोजेक्ट टेम्पलेट क्लोन करना