वर्तमान निर्देशिका में सभी उपनिर्देशिकाओं की सूची प्राप्त करना


558

क्या पायथन में वर्तमान निर्देशिका में सभी उपनिर्देशिकाओं की सूची वापस करने का कोई तरीका है?

मुझे पता है कि आप फ़ाइलों के साथ ऐसा कर सकते हैं, लेकिन मुझे इसके बजाय निर्देशिकाओं की सूची प्राप्त करने की आवश्यकता है।


जवाबों:


602

क्या आपका मतलब है कि तत्काल उपनिर्देशिकाएं, या हर निर्देशिका पेड़ के नीचे है?

किसी भी तरह से, आप ऐसा करने के os.walkलिए उपयोग कर सकते हैं :

os.walk(directory)

प्रत्येक उपनिर्देशिका के लिए एक tuple निकलेगा। 3-ट्यूपल में Ths पहली प्रविष्टि एक निर्देशिका नाम है, इसलिए

[x[0] for x in os.walk(directory)]

आपको सभी उपनिर्देशिकाएँ, पुनरावर्ती रूप से देनी चाहिए।

ध्यान दें कि टपल में दूसरी प्रविष्टि पहली स्थिति में प्रवेश की बाल निर्देशिकाओं की सूची है, इसलिए आप इसके बजाय इसका उपयोग कर सकते हैं, लेकिन यह आपको बहुत अधिक बचाने की संभावना नहीं है।

हालाँकि, आप इसका उपयोग सिर्फ आपको तत्काल बाल निर्देशिका देने के लिए कर सकते हैं:

next(os.walk('.'))[1]

या पहले से ही पोस्ट किए गए अन्य समाधानों का उपयोग करके देखें, os.listdirऔर os.path.isdir" पायथन में तत्काल सबडायरेक्टरीज़ को कैसे प्राप्त करें " सहित उन पर ।


7
मुझे लगता है कि os.walk रिटर्न ट्रिपल्स (रूट, डायर, फाइलें)। जिसका अर्थ है कि dirs में कई दोहराई जाने वाली प्रविष्टियां हैं। क्या कोई अधिक कुशल तरीका है जो निर्देशिकाओं के माध्यम से पुनरावृत्ति करता है?
21

22
सीधे os.walk('.').next()[1]या os.walk('.').__next__()[1]सीधे इस्तेमाल न करें । इसके बजाय, अंतर्निहित फ़ंक्शन का उपयोग करें next(), जो कि पायथन 2 (डॉक देखें) और पायथन 3 (देखें डॉक) दोनों में उपलब्ध है । उदाहरण के लिए next(os.walk('.'))[1]:।
लुसियो पाइवा

1
@Lucio os.walk('.').next()[1]सीधे उपयोग करना क्यों बुरा है ?
वारबकी

8
@wisbucky यह एक बुरा अभ्यास है क्योंकि iteraror.__next__()एक आंतरिक विधि है और iterator.next()उपयोग next()PEP-3114 के अनुसार बिल्ट-इन में परिवर्तित किया जाना चाहिए । PEP-3114 देखें जिसे 2007 में मंजूरी दी गई थी।
लुसियो पाइवा

16
के प्रदर्शन के बीच मतभेदों के बारे में चिंतित किसी के लिए भी os.walkऔर os.listdir+ os.path.isdirसमाधान: मैं बस 10,000 उपनिर्देशिका (नीचे पदानुक्रम में फ़ाइलों के लाखों लोगों के साथ) के साथ एक निर्देशिका पर परीक्षण किया और प्रदर्शन में अंतर बहुत मामूली हैं। os.walk: "10 लूप्स, सर्वश्रेष्ठ 3: 44.6 मिसेक प्रति लूप" और os.listdir+ os.path.isdir: "10 लूप्स, बेस्ट ऑफ 3: 45.1
मिसेक

166
import os

d = '.'
[os.path.join(d, o) for o in os.listdir(d) 
                    if os.path.isdir(os.path.join(d,o))]

5
ध्यान दें कि इस दृष्टिकोण में आपको '' निष्पादित नहीं किए जाने पर एब्सपैथ-मुद्दों की देखभाल करने की आवश्यकता है। '
daspostloch

4
बस एक सिर ऊपर, अगर आप ( '।') CWD उपयोग नहीं कर रहे, इस जब तक आप एक ऐसा काम नहीं करेगा os.path.joinपर oपूर्ण पथ प्राप्त करने के लिए, नहीं तो isdir(0)हमेशा अवास्तविक लौटाते हैं
जेम्स मैकमोहन

5
ऐसा प्रतीत होता है कि उपरोक्त दो मुद्दों के लिए पोस्ट को फ़िक्स के साथ अपडेट किया गया है।
cgmb

1
os.path.joinदो बार कॉल करने से बचने के लिए , आप पहले शामिल हो सकते हैं और फिर सूची को फ़िल्टर कर सकते हैं os.path.isdir: filter(os.path.isdir, [os.path.join(d, o) for o in os.listdir(d)])
quant_dev

154

आप बस इस्तेमाल कर सकते हैं glob.glob

from glob import glob
glob("/path/to/directory/*/")

के /बाद अनुगामी मत भूलना *


अच्छा लगा। सरल। केवल, यह /नामों में अनुगामी छोड़ता है
juanmirocks

9
यदि आप /फ़ोल्डर विभाजक होने का अनुमान नहीं लगा सकते हैं , तो ऐसा करें:glob(os.path.join(path_to_directory, "*", ""))
juanmirocks

1
यह उपनिर्देशिकाओं के लिए काम नहीं करता है! ग्लोब का उपयोग करने के लिए यहां पूर्ण उत्तर है: पायथन में पुनरावर्ती फ़ाइलों को खोजने के लिए ग्लोब () का उपयोग करें?
पॉपपी

1
ग्लोब को पुनरावर्ती बनाने के लिए आप बस निम्नलिखित तर्क जोड़ सकते हैंrecursive=True
जैकोसोलारी

102

उपरोक्त की तुलना में बहुत अच्छा है, क्योंकि आपको कई os.path.join () की आवश्यकता नहीं है और आपको सीधे पूरा रास्ता मिल जाएगा (यदि आप चाहें), तो आप इसे पायथन 3.5 और इसके बाद के संस्करण में कर सकते हैं ।

subfolders = [ f.path for f in os.scandir(folder) if f.is_dir() ]

यह उपनिर्देशिका को पूरा रास्ता देगा। यदि आप f.nameइसके बजाय केवल उपनिर्देशिका का नाम चाहते हैंf.path

https://docs.python.org/3/library/os.html#os.scandir


थोड़ा सा OT: यदि आपको सभी सबफ़ोल्डर को पुनरावर्ती और / या सभी फ़ाइलों की पुनरावृत्ति की आवश्यकता है , तो इस फ़ंक्शन पर एक नज़र डालें, जो इससे अधिक तेज़ है os.walkऔर globसभी सबफ़ोल्डर्स की सूची के साथ-साथ उन (उप) सबफ़ोल्डर्स के अंदर सभी फ़ाइलों को लौटाएगा: https://stackoverflow.com/a/59803793/2441026

मामले में आप केवल सभी सबफ़ोल्डर्स को पुनरावर्ती चाहते हैं :

def fast_scandir(dirname):
    subfolders= [f.path for f in os.scandir(dirname) if f.is_dir()]
    for dirname in list(subfolders):
        subfolders.extend(fast_scandir(dirname))
    return subfolders

अपने पूरे रास्तों के साथ सभी सबफ़ोल्डरों की सूची लौटाता है। यह फिर से तेज है os.walkऔर बहुत तेजी से है glob


सभी कार्यों का विश्लेषण

tl; डॉ:
- यदि आप किसी फ़ोल्डर उपयोग के लिए सभी तत्काल उपनिर्देशिकाएँ प्राप्त करना चाहते हैं os.scandir
- यदि आप सभी उपनिर्देशिकाएँ प्राप्त करना चाहते हैं , यहां तक ​​कि नेस्टेड वाले, उपयोग करें os.walkया - थोड़ा तेज़ - fast_scandirऊपर फ़ंक्शन।
- कभी भी os.walkकेवल शीर्ष-स्तरीय उपनिर्देशिकाओं के लिए उपयोग न करें , क्योंकि यह सैकड़ों (!) की तुलना में धीमा हो सकता है os.scandir

  • यदि आप नीचे दिए गए कोड को चलाते हैं, तो इसे एक बार ज़रूर चलाएं, ताकि आपके ओएस ने फ़ोल्डर तक पहुंच बनाई हो, परिणामों को छोड़ दें और परीक्षण चलाएं, अन्यथा परिणाम खराब हो जाएंगे।
  • आप फ़ंक्शन कॉल को मिक्स करना चाह सकते हैं, लेकिन मैंने इसका परीक्षण किया, और यह वास्तव में मायने नहीं रखता था।
  • सभी उदाहरण फ़ोल्डर को पूरा रास्ता देंगे। पथलिब उदाहरण एक विंडोज (विंडोज) पथ ऑब्जेक्ट के रूप में।
  • os.walkआधार फ़ोल्डर का पहला तत्व होगा। इसलिए आपको केवल उपनिर्देशिकाएँ नहीं मिलेंगी। आप fu.pop(0)इसे हटाने के लिए उपयोग कर सकते हैं ।
  • कोई भी परिणाम प्राकृतिक छँटाई का उपयोग नहीं करेगा । इसका मतलब है कि परिणाम इस प्रकार होंगे: 1, 10, 2. प्राकृतिक छंटाई (1, 2, 10) प्राप्त करने के लिए , कृपया https://stackoverflow.com/a/48030307/2441026 पर एक नज़र डालें।


परिणाम :

os.scandir      took   1 ms. Found dirs: 439
os.walk         took 463 ms. Found dirs: 441 -> it found the nested one + base folder.
glob.glob       took  20 ms. Found dirs: 439
pathlib.iterdir took  18 ms. Found dirs: 439
os.listdir      took  18 ms. Found dirs: 439

W7x64, पायथन 3.8.1 के साथ परीक्षण किया गया।

# -*- coding: utf-8 -*-
# Python 3


import time
import os
from glob import glob
from pathlib import Path


directory = r"<insert_folder>"
RUNS = 1


def run_os_walk():
    a = time.time_ns()
    for i in range(RUNS):
        fu = [x[0] for x in os.walk(directory)]
    print(f"os.walk\t\t\ttook {(time.time_ns() - a) / 1000 / 1000 / RUNS:.0f} ms. Found dirs: {len(fu)}")


def run_glob():
    a = time.time_ns()
    for i in range(RUNS):
        fu = glob(directory + "/*/")
    print(f"glob.glob\t\ttook {(time.time_ns() - a) / 1000 / 1000 / RUNS:.0f} ms. Found dirs: {len(fu)}")


def run_pathlib_iterdir():
    a = time.time_ns()
    for i in range(RUNS):
        dirname = Path(directory)
        fu = [f for f in dirname.iterdir() if f.is_dir()]
    print(f"pathlib.iterdir\ttook {(time.time_ns() - a) / 1000 / 1000 / RUNS:.0f} ms. Found dirs: {len(fu)}")


def run_os_listdir():
    a = time.time_ns()
    for i in range(RUNS):
        dirname = Path(directory)
        fu = [os.path.join(directory, o) for o in os.listdir(directory) if os.path.isdir(os.path.join(directory, o))]
    print(f"os.listdir\t\ttook {(time.time_ns() - a) / 1000 / 1000 / RUNS:.0f} ms. Found dirs: {len(fu)}")


def run_os_scandir():
    a = time.time_ns()
    for i in range(RUNS):
        fu = [f.path for f in os.scandir(directory) if f.is_dir()]
    print(f"os.scandir\t\ttook {(time.time_ns() - a) / 1000 / 1000 / RUNS:.0f} ms.\tFound dirs: {len(fu)}")


if __name__ == '__main__':
    run_os_scandir()
    run_os_walk()
    run_glob()
    run_pathlib_iterdir()
    run_os_listdir()

35

यदि आपको एक पुनरावर्ती समाधान की आवश्यकता है जो उपनिर्देशिकाओं में सभी उपनिर्देशिकाओं को ढूंढ लेगा, तो पहले प्रस्तावित के अनुसार चलना का उपयोग करें।

यदि आपको केवल वर्तमान निर्देशिका की बाल निर्देशिकाओं की आवश्यकता है, तो संयोजन os.listdirकरेंos.path.isdir



23

अजगर-ओएस-वॉक का उपयोग करके इसे लागू किया गया। ( http://www.pythonforbeginners.com/code-snippets-source-code/python-os-walk/ )

import os

print("root prints out directories only from what you specified")
print("dirs prints out sub-directories from root")
print("files prints out all files from root and directories")
print("*" * 20)

for root, dirs, files in os.walk("/var/log"):
    print(root)
    print(dirs)
    print(files)

19

आप os.listdir (पथ) का उपयोग करके Python 2.7 में उपनिर्देशिका (और फाइलें) की सूची प्राप्त कर सकते हैं

import os
os.listdir(path)  # list of subdirectories and files

59
इसमें फाइलें भी शामिल हैं।
तारने काॅलमैन

2
नाम भ्रामक है क्योंकि 'dir' सूची बनाने वाली वस्तुओं के लिए नहीं बल्कि कंटेनर डायरेक्टरी को संदर्भित करता है। कृपया अपने एक-पंक्ति उत्तरों की जांच करें, शुरुआती लोगों के लिए उन्हें चुनना बहुत ही आकर्षक है।
टिटौ

4
कि से सावधान रहें os.listdirफ़ाइलों सहित निर्देशिका की सूची सामग्री।
गनियुस

13

केवल निर्देशिका को सूचीबद्ध करना

print("\nWe are listing out only the directories in current directory -")
directories_in_curdir = filter(os.path.isdir, os.listdir(os.curdir))
print(directories_in_curdir)

लिस्टिंग केवल वर्तमान निर्देशिका में फ़ाइलें

files = filter(os.path.isfile, os.listdir(os.curdir))
print("\nThe following are the list of all files in the current directory -")
print(files)

2
मैक ओएस पर काम नहीं किया। मुझे लगता है कि समस्या यह है कि os.listdir केवल निर्देशिका का नाम देता है और पूर्ण पथ नहीं है, लेकिन os.path.isdir केवल सही रिटर्न देता है यदि पूर्ण पथ एक निर्देशिका है।
डेंसन नोव

वर्तमान निर्देशिका के बाहर यह काम करता है यदि आप लाइन को थोड़ा संशोधित करते हैं: subdirs = filter (os.path.isdir, [os.path.join (dir, x) में x के लिए os.listdir (dir)]
RLC

12

पायथन 3.4 ने मानक पुस्तकालय में मॉड्यूल पेश कियाpathlib , जो फाइलसिस्टम रास्तों को संभालने के लिए एक वस्तु उन्मुख दृष्टिकोण प्रदान करता है:

from pathlib import Path

p = Path('./')

# List comprehension
[f for f in p.iterdir() if f.is_dir()]

# The trailing slash to glob indicated directories
# This will also include the current directory '.'
list(p.glob('**/'))

पाथिब पर भी पाथिब 2 मॉड्यूल के माध्यम से पायथन 2.7 पायथन पर उपलब्ध है


उपनिर्देशिकाओं की सूची पर पुनरावृत्ति करने के लिए, यहाँ एक अच्छा, साफ वाक्यविन्यास है:for f in filter(Path.is_dir, p.iterdir()):
ब्रायन रोच

11

चूंकि मैं पायथन 3.4 और विंडोज यूएनसी रास्तों का उपयोग करके इस समस्या से लड़ रहा हूं, इसलिए यहां इस वातावरण के लिए एक प्रकार है:

from pathlib import WindowsPath

def SubDirPath (d):
    return [f for f in d.iterdir() if f.is_dir()]

subdirs = SubDirPath(WindowsPath(r'\\file01.acme.local\home$'))
print(subdirs)

Pathlib Python 3.4 में नया है और विभिन्न OS के तहत पथों के साथ काम करना बहुत आसान है: https://docs.python.org/3.4/library/pathlib.html


10

हालांकि इस सवाल का जवाब बहुत समय पहले दिया गया है। मैं pathlibमॉड्यूल का उपयोग करने की सिफारिश करना चाहता हूं क्योंकि यह विंडोज और यूनिक्स ओएस पर काम करने का एक मजबूत तरीका है।

तो उपनिर्देशिका सहित एक विशिष्ट निर्देशिका में सभी पथ प्राप्त करने के लिए:

from pathlib import Path
paths = list(Path('myhomefolder', 'folder').glob('**/*.txt'))

# all sorts of operations
file = paths[0]
file.name
file.stem
file.parent
file.suffix

आदि।


9

टिप्स के लिए शुक्रिया दोस्तों। मैं सॉफ्टलिंक्स (अनंत पुनरावर्तन) के साथ एक मुद्दे में भाग गया, जिसे डायर के रूप में लौटाया जा रहा है। Softlinks? हम कोई बदबूदार नरम लिंक नहीं चाहते हैं! इसलिए...

यह सिर्फ डायरियों को प्रस्तुत करता है, सॉफ्टलिंक्स को नहीं:

>>> import os
>>> inf = os.walk('.')
>>> [x[0] for x in inf]
['.', './iamadir']

1
[x[0] for x in inf]अजगर में क्या कहा जाता है तो मैं इसे देख सकता हूं?
shinzou

2
@ शिनज़ौ यह एक सूची की समझ है। सुपर उपयोगी है। इसके अलावा बड़े पैमाने पर समझ हासिल करें।
कर्टबी

9

कॉपी पेस्ट दोस्ताना में ipython:

import os
d='.'
folders = list(filter(lambda x: os.path.isdir(os.path.join(d, x)), os.listdir(d)))

इससे आउटपुट print(folders):

['folderA', 'folderB']

2
इस मामले में X क्या है?
अभिषेक पारिख

1
@AbhishekParikh xसूची से आइटम है os.listdir(d)क्योंकि listdirवह फ़ाइलों और फ़ोल्डरों को वापस करेगा जो वह सूची से किसी भी फाइल को फ़िल्टर करने के लिए filterकमांड का उपयोग कर रहा है os.path.isdir
जेम्स बर्क

8

यह मेरा इसे करने का तरीका है।

    import os
    for x in os.listdir(os.getcwd()):
        if os.path.isdir(x):
            print(x)

यह काम नहीं करता है। मुझे लगता है कि x में आपको isdir ()
niranjan patidar

आपको शायद os.getcwd () के साथ समस्या हो रही है; अनिवार्य रूप से, आप जो कर सकते हैं वह है कि आप पूर्ण पथ प्राप्त कर सकते हैं और इसके बजाय इसका उपयोग कर सकते हैं। dir = os.path.dirname (os.path.abspath ( फ़ाइल ))
मुजीब

ओएस का उपयोग, pat.join () मेरे लिए काम किया। क्योंकि इससे उपनिर्देशिका का पूरा मार्ग प्राप्त करने में मदद मिली।
निरंजन पाटीदार

7

यहाँ @Blair कॉनराड के उदाहरण पर आधारित कुछ सरल कार्य हैं -

import os

def get_subdirs(dir):
    "Get a list of immediate subdirectories"
    return next(os.walk(dir))[1]

def get_subfiles(dir):
    "Get a list of immediate subfiles"
    return next(os.walk(dir))[2]

6

एली बेंडरस्की के समाधान पर निर्माण, निम्नलिखित उदाहरण का उपयोग करें:

import os
test_directory = <your_directory>
for child in os.listdir(test_directory):
    test_path = os.path.join(test_directory, child)
    if os.path.isdir(test_path):
        print test_path
        # Do stuff to the directory "test_path"

<your_directory>उस निर्देशिका के लिए पथ है जहाँ आप ट्रैवर्स करना चाहते हैं।


5

पूरा पथ और पथ से किया जा रहा के लिए लेखांकन के साथ ., .., \\, ..\\..\\subfolder, आदि:

import os, pprint
pprint.pprint([os.path.join(os.path.abspath(path), x[0]) \
    for x in os.walk(os.path.abspath(path))])

4

यह उत्तर पहले से मौजूद नहीं था।

directories = [ x for x in os.listdir('.') if os.path.isdir(x) ]

7
यह हमेशा एक खाली सूची लौटाएगा यदि आप वर्तमान कामकाजी निर्देशिका के अलावा कुछ भी खोज रहे हैं, जो तकनीकी रूप से ओपी को क्या करना है, लेकिन बहुत पुन: प्रयोज्य नहीं है।
ochawkeye

2
निर्देशिका = [x के लिए x में os.listdir (localDir) यदि os.path.isdir (localDir + x)
पूनम

3

मैंने हाल ही में एक समान प्रश्न किया है, और मुझे पता चला है कि अजगर 3.6 के लिए सबसे अच्छा उत्तर (जैसा कि उपयोगकर्ता हवलॉक जोड़ा गया है) का उपयोग करना है os.scandir। चूंकि ऐसा लगता है कि इसका उपयोग करने का कोई हल नहीं है, मैं अपना खुद का जोड़ दूंगा। सबसे पहले, एक गैर-पुनरावर्ती समाधान जो रूट निर्देशिका के तहत सीधे केवल उपनिर्देशिका को सूचीबद्ध करता है।

def get_dirlist(rootdir):

    dirlist = []

    with os.scandir(rootdir) as rit:
        for entry in rit:
            if not entry.name.startswith('.') and entry.is_dir():
                dirlist.append(entry.path)

    dirlist.sort() # Optional, in case you want sorted directory names
    return dirlist

पुनरावर्ती संस्करण इस तरह दिखेगा:

def get_dirlist(rootdir):

    dirlist = []

    with os.scandir(rootdir) as rit:
        for entry in rit:
            if not entry.name.startswith('.') and entry.is_dir():
                dirlist.append(entry.path)
                dirlist += get_dirlist(entry.path)

    dirlist.sort() # Optional, in case you want sorted directory names
    return dirlist

ध्यान रखें कि entry.pathउपनिर्देशिका के लिए निरपेक्ष पथ को जन्म देता है। मामले में आपको केवल फ़ोल्डर नाम की आवश्यकता है, आप entry.nameइसके बजाय उपयोग कर सकते हैं । ऑब्जेक्ट के बारे में अतिरिक्त विवरण के लिए os.DirEntry का संदर्भ लें entry


दरअसल, जिस तरह से यह लिखा गया है वह 3.5 पर काम नहीं करेगा, केवल 3.6। 3.5 का उपयोग करने के लिए आपको संदर्भ प्रबंधक को हटाने की आवश्यकता है - stackoverflow.com/questions/41401417/…
9

यह सही है। मैं कसम खा सकता हूं कि मैंने कहीं पढ़ा कि संदर्भ प्रबंधक 3.5 में लागू किया गया था, लेकिन ऐसा लगता है कि मैं गलत हूं।
अल्बर्टो ए

1

कुछ इस तरह os.path.isdirसे एक फिल्टर फ़ंक्शन का उपयोग os.listdir()करेंfilter(os.path.isdir,[os.path.join(os.path.abspath('PATH'),p) for p in os.listdir('PATH/')])


1

यह फ़ाइल ट्री के ठीक नीचे सभी उपनिर्देशिकाओं को सूचीबद्ध करेगा।

import pathlib


def list_dir(dir):
    path = pathlib.Path(dir)
    dir = []
    try:
        for item in path.iterdir():
            if item.is_dir():
                dir.append(item)
                dir = dir + list_dir(item)
        return dir
    except FileNotFoundError:
        print('Invalid directory')

pathlib संस्करण 3.4 में नया है


1

दिए गए फ़ाइल पथ के भीतर सभी उपनिर्देशिकाओं की सूची वापस करने के लिए फ़ंक्शन। पूरे फ़ाइल ट्री के माध्यम से खोज करेंगे।

import os

def get_sub_directory_paths(start_directory, sub_directories):
    """
    This method iterates through all subdirectory paths of a given 
    directory to collect all directory paths.

    :param start_directory: The starting directory path.
    :param sub_directories: A List that all subdirectory paths will be 
        stored to.
    :return: A List of all sub-directory paths.
    """

    for item in os.listdir(start_directory):
        full_path = os.path.join(start_directory, item)

        if os.path.isdir(full_path):
            sub_directories.append(full_path)

            # Recursive call to search through all subdirectories.
            get_sub_directory_paths(full_path, sub_directories)

return sub_directories

1

हम os.walk () का उपयोग करके सभी फ़ोल्डरों की सूची प्राप्त कर सकते हैं

import os

path = os.getcwd()

pathObject = os.walk(path)

यह pathObject एक ऑब्जेक्ट है और हम इसके द्वारा एक अरै प्राप्त कर सकते हैं

arr = [x for x in pathObject]

arr is of type [('current directory', [array of folder in current directory], [files in current directory]),('subdirectory', [array of folder in subdirectory], [files in subdirectory]) ....]

हम के माध्यम से पुनरावृत्ति द्वारा सभी उप-निर्देशिका की सूची प्राप्त कर सकते हैं आगमन और मध्यम सरणी मुद्रण

for i in arr:
   for j in i[1]:
      print(j)

यह सभी उपनिर्देशिका को प्रिंट करेगा।

सभी फाइलें प्राप्त करने के लिए:

for i in arr:
   for j in i[2]:
      print(i[0] + "/" + j)

0

यह फ़ंक्शन, किसी दिए गए माता-पिता के साथ directoryअपने सभी directoriesपुनरावर्ती और जो इसके अंदर पाया जाता है, उस पर printsनिर्भर करता filenamesहै। बहुत उपयोगी है।

import os

def printDirectoryFiles(directory):
   for filename in os.listdir(directory):  
        full_path=os.path.join(directory, filename)
        if not os.path.isdir(full_path): 
            print( full_path + "\n")


def checkFolders(directory):

    dir_list = next(os.walk(directory))[1]

    #print(dir_list)

    for dir in dir_list:           
        print(dir)
        checkFolders(directory +"/"+ dir) 

    printDirectoryFiles(directory)       

main_dir="C:/Users/S0082448/Desktop/carpeta1"

checkFolders(main_dir)


input("Press enter to exit ;")

0

यहाँ से कई समाधानों को जोड़कर, यह वही है जिसका मैंने उपयोग किया है:

import os
import glob

def list_dirs(path):
    return [os.path.basename(x) for x in filter(
        os.path.isdir, glob.glob(os.path.join(path, '*')))]
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.