मैं पायथन में एक निर्देशिका की सामग्री को कैसे सूचीबद्ध कर सकता हूं?


जवाबों:



52

एक रास्ता:

import os
os.listdir("/home/username/www/")

दूसरा तरीका :

glob.glob("/home/username/www/*")

उदाहरण यहाँ मिले

glob.globऊपर दी गई विधि छिपी हुई फ़ाइलों को सूचीबद्ध नहीं करेगी।

चूँकि मैंने वर्षों पहले मूल रूप से इस प्रश्न का उत्तर दिया था, इसलिए पैथलॉन को पायथन में जोड़ा गया है। निर्देशिका को सूचीबद्ध करने का मेरा पसंदीदा तरीका अब आमतौर iterdirपर Pathवस्तुओं पर विधि शामिल है:

from pathlib import Path
print(*Path("/home/username/www/").iterdir(), sep="\n")

क्या ग्लोब.ग्लोब छिपी हुई फ़ाइलों की सूची होगी (मुझे लगता है कि आप .XYZयूनिक्स फाइल-सिस्टम संदर्भ में फ़ाइलों का मतलब है), जब इसके साथ प्रयोग किया जाता है glob.glob("/home/username/www/.*")?
एंडी फिंकेंस्टेड

हाँ, मेरा मतलब है कि एक डॉट के साथ शुरू होने वाली फाइलें। आपके द्वारा दिया गया उदाहरण छिपी हुई फ़ाइलों (और केवल छिपी हुई फ़ाइलों) के मिलान के लिए काम करेगा।
ट्रे हंटर

मैं सिर्फ ग्लोब आयात करता था और ग्लोब.ग्लोब (r'c: \ users ') का उपयोग करता था, लेकिन यह केवल वापस आ गया['c:\\users']
Musixauce3000

1
@ Musixauce3000: आप ऐसा करना चाहते हैं glob.glob(r'c:\users\*')(ग्लोब यह वास्तव में निर्देशिकाओं को सूचीबद्ध नहीं करता है, लेकिन तारांकन और ऐसे कार्य को पूरा करता है)।
ट्रे हुनर

38

os.walk यदि आपको पुनरावृत्ति की आवश्यकता है तो इसका उपयोग किया जा सकता है:

import os
start_path = '.' # current directory
for path,dirs,files in os.walk(start_path):
    for filename in files:
        print os.path.join(path,filename)

18

glob.globया कर os.listdirदेगा।


import globएंटर glob.glob(r'c:\users')एंटर केवल वापसी के लिए लगता है ['c:\\users']। ऐसा क्यों है? मैं glob.glob का उपयोग करना चाहता हूं क्योंकि जैसा कि अन्य उपयोगकर्ताओं ने बताया है, यह छिपी हुई फाइलों की अनदेखी करते हुए एक निर्देशिका की सामग्री को निश्चित रूप से वापस करता है। यह महत्वपूर्ण है।
Musixauce3000

आप के साथ एक वाइल्डकार्ड निर्दिष्ट करने के लिए है, क्योंकि glob:glob.glob(r'c:\users\*')
जीन फ़्राँस्वा Fabre

14

osमॉड्यूल हैंडल का और सामान।

os.listdir(path)

पथ द्वारा दी गई निर्देशिका में प्रविष्टियों के नाम वाली सूची लौटाएं। सूची मनमाने क्रम में है। इसमें विशेष प्रविष्टियाँ शामिल नहीं हैं '।' और '..' भले ही वे डायरेक्टरी में मौजूद हों।

उपलब्धता: यूनिक्स, विंडोज।


4

पायथन 3.4+ में, आप नए pathlibपैकेज का उपयोग कर सकते हैं :

from pathlib import Path
for path in Path('.').iterdir():
    print(path)

Path.iterdir()एक पुनरावृत्ति देता है, जिसे आसानी से एक में बदला जा सकता है list:

contents = list(Path('.').iterdir())

3

पायथन 3.5 के बाद से, आप उपयोग कर सकते हैं os.scandir

अंतर यह है कि यह फ़ाइल प्रविष्टियाँ लौटाता है नाम नहीं। विंडोज़ जैसे कुछ OS पर, इसका मतलब है कि आपको os.path.isdir/fileयह जानने की ज़रूरत नहीं है कि यह फ़ाइल है या नहीं, और यह सीपीयू समय बचाता है क्योंकि statविंडोज में डीआईआर स्कैन करते समय पहले से ही किया जाता है:

एक निर्देशिका की सूची और max_valueबाइट्स से बड़ी फ़ाइलों को प्रिंट करने के लिए उदाहरण :

for dentry in os.scandir("/path/to/dir"):
    if dentry.stat().st_size > max_value:
       print("{} is biiiig".format(dentry.name))

(मेरा एक व्यापक प्रदर्शन-आधारित उत्तर यहां पढ़ें )


2

नीचे दिए गए कोड निर्देशिका और फ़ाइलों को dir के भीतर सूचीबद्ध करेगा। अन्य एक os.walk है

def print_directory_contents(sPath):
        import os                                       
        for sChild in os.listdir(sPath):                
            sChildPath = os.path.join(sPath,sChild)
            if os.path.isdir(sChildPath):
                print_directory_contents(sChildPath)
            else:
                print(sChildPath)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.