किसी निर्देशिका के अंदर सभी फाइलों को कुशलतापूर्वक प्राप्त करना विभिन्न पाइथन प्रोग्रामों में एक महत्वपूर्ण कार्य है, खासकर वे जो फाइल सिस्टम हेरफेर, डेटा प्रोसेसिंग या ऑटोमेशन से जुड़े हैं। पाइथन इसे पूरा करने के लिए कई मजबूत तरीके प्रदान करता है, प्रत्येक के अपने फायदे और नुकसान हैं। यह लेख तीन लोकप्रिय तरीकों का पता लगाता है: os.listdir
, os.walk
, और glob.glob
, आपकी विशिष्ट आवश्यकताओं के लिए सबसे उपयुक्त विधि चुनने में आपका मार्गदर्शन करता है।
विषयवस्तु की तालिका
os.listdir
: एकल निर्देशिका में फ़ाइलों की सूचीos.walk
: पुनरावर्ती निर्देशिका ट्रैवर्सलglob.glob
: पैटर्न-आधारित फ़ाइल चयन- सही विधि चुनना
os.listdir
: एकल निर्देशिका में फ़ाइलों की सूची
os.listdir()
फ़ंक्शन किसी निर्दिष्ट निर्देशिका के अंदर सभी प्रविष्टियों (फ़ाइलें और उपनिर्देशिकाएँ) की सूची प्राप्त करने का सबसे सरल तरीका प्रदान करता है। यह स्ट्रिंग्स की एक सूची देता है, प्रत्येक उस निर्देशिका के अंदर किसी आइटम के नाम का प्रतिनिधित्व करता है।
import os
def list_directory_files(directory):
"""किसी दिए गए निर्देशिका में सभी फ़ाइलों और निर्देशिकाओं को सूचीबद्ध करता है।
Args:
directory: निर्देशिका का पथ।
Returns:
निर्दिष्ट निर्देशिका में फ़ाइलनाम (स्ट्रिंग्स) और निर्देशिका नामों की एक सूची।
यदि निर्देशिका खाली है या मौजूद नहीं है तो एक खाली सूची देता है।
यदि निर्देशिका नहीं मिलती है तो एक त्रुटि संदेश प्रिंट करता है।
"""
try:
return os.listdir(directory)
except FileNotFoundError:
print(f"त्रुटि: निर्देशिका '{directory}' नहीं मिली।")
return []
my_directory = "/path/to/your/directory" # अपनी निर्देशिका पथ से बदलें
files_and_dirs = list_directory_files(my_directory)
print(files_and_dirs)
लाभ: एकल-निर्देशिका लिस्टिंग के लिए सरल और कुशल।
नुकसान: पुनरावर्ती रूप से उपनिर्देशिकाओं को पार नहीं करता है; केवल फ़ाइल नाम प्रदान करता है, पूर्ण पथ नहीं।
os.walk
: पुनरावर्ती निर्देशिका ट्रैवर्सल
पुनरावर्ती रूप से निर्देशिकाओं और उनकी उपनिर्देशिकाओं का पता लगाने के लिए, os.walk()
आदर्श विकल्प है। यह प्रत्येक निर्देशिका के लिए एक 3-टुपल देता है: (root, dirs, files)
। root
वर्तमान निर्देशिका का पथ है, dirs
उपनिर्देशिका नामों की एक सूची है, और files
उस निर्देशिका के अंदर फ़ाइलनामों की सूची है।
import os
def get_all_files(directory):
"""किसी निर्देशिका और उसकी उपनिर्देशिकाओं के भीतर सभी फ़ाइलों को पुनरावर्ती रूप से प्राप्त करता है।
Args:
directory: निर्देशिका का पथ।
Returns:
पूर्ण फ़ाइलपथ (स्ट्रिंग्स) की एक सूची। यदि निर्देशिका खाली है या मौजूद नहीं है तो एक खाली सूची देता है।
यदि निर्देशिका नहीं मिलती है तो एक त्रुटि संदेश प्रिंट करता है।
"""
all_files = []
try:
for root, _, files in os.walk(directory):
for file in files:
all_files.append(os.path.join(root, file))
return all_files
except FileNotFoundError:
print(f"त्रुटि: निर्देशिका '{directory}' नहीं मिली।")
return []
my_directory = "/path/to/your/directory" # अपनी निर्देशिका पथ से बदलें
all_files = get_all_files(my_directory)
print(all_files)
लाभ: पुनरावर्ती रूप से उपनिर्देशिकाओं को पार करता है, पूर्ण फ़ाइलपथ प्रदान करता है।
नुकसान: os.listdir()
की तुलना में थोड़ा अधिक जटिल।
glob.glob
: पैटर्न-आधारित फ़ाइल चयन
glob.glob()
फ़ंक्शन शेल-शैली वाइल्डकार्ड का उपयोग करके लचीला फ़ाइल नाम मिलान प्रदान करता है। यह विशिष्ट पैटर्न के आधार पर फ़ाइलों का चयन करने के लिए विशेष रूप से उपयोगी है (जैसे, सभी .txt
फ़ाइलें, “report_” से शुरू होने वाली फ़ाइलें)।
import glob
import os
def get_files_by_pattern(directory, pattern="*"):
"""किसी निर्देशिका के भीतर किसी पैटर्न से मेल खाने वाली फ़ाइलें प्राप्त करता है।
Args:
directory: निर्देशिका का पथ।
pattern: फ़ाइल नाम पैटर्न (डिफ़ॉल्ट "*" है, सभी फ़ाइलों से मेल खाता है)।
Returns:
पैटर्न से मेल खाने वाले पूर्ण फ़ाइलपथ (स्ट्रिंग्स) की एक सूची।
यदि कोई फ़ाइलें मेल नहीं खाती हैं या निर्देशिका मौजूद नहीं है तो एक खाली सूची देता है।
यदि निर्देशिका नहीं मिलती है तो एक त्रुटि संदेश प्रिंट करता है।
"""
try:
return glob.glob(os.path.join(directory, pattern))
except FileNotFoundError:
print(f"त्रुटि: निर्देशिका '{directory}' नहीं मिली।")
return []
my_directory = "/path/to/your/directory" # अपनी निर्देशिका पथ से बदलें
txt_files = get_files_by_pattern(my_directory, "*.txt")
print(txt_files)
all_files = get_files_by_pattern(my_directory)
print(all_files)
लाभ: शक्तिशाली पैटर्न मिलान क्षमताएँ।
नुकसान: साधारण लिस्टिंग के लिए os.listdir()
से कम सरल; जब तक os.walk()
के साथ संयोजित नहीं किया जाता है, तब तक पुनरावर्ती रूप से उपनिर्देशिकाओं को पार नहीं करता है।
सही विधि चुनना
इष्टतम विधि आपकी विशिष्ट आवश्यकताओं पर निर्भर करती है:
- एकल निर्देशिका की साधारण लिस्टिंग के लिए,
os.listdir()
पर्याप्त है। - निर्देशिकाओं और उपनिर्देशिकाओं के पुनरावर्ती ट्रैवर्सल के लिए,
os.walk()
सबसे अच्छा विकल्प है। - पैटर्न का उपयोग करके चयनात्मक फ़ाइल पुनर्प्राप्ति के लिए,
glob.glob()
सबसे कुशल समाधान प्रदान करता है।
मजबूत कोड के लिए उपयुक्त त्रुटि हैंडलिंग (जैसे, FileNotFoundError
) को शामिल करना याद रखें।