enter image description here

मान लीजिए कि मैं वर्तमान में current_dir नामक निर्देशिका में हूं जिसमें ऊपर दिखाए गए अनुसार लिनक्स में निर्देशिका संरचना है। इस निर्देशिका में उप निर्देशिकाएँ हैं जिनमें आगे उप निर्देशिकाएँ हैं और इसी तरह।

मैं प्रत्येक निर्देशिका के अंतिम स्तर के अंत में एक फ़ाइल बनाना चाहता हूं, अर्थात निर्देशिकाओं पर b और c जो अंतिम स्तर निर्देशिकाएं हैं प्रथम में और इसी प्रकार निर्देशिकाओं में e और f में जो अंतिम स्तर निर्देशिकाएं सेकंड में हैं मजबूत>। मुझे केवल current_dir निर्देशिका का पथ दिया गया है।

मैं इस कोड के साथ कोशिश कर रहा था: -

path = os.walk('/current_dir')
for root, directories, files in path:
    for directory in directories:

लेकिन यहां समस्या यह है कि मैं यह पता लगाने में सक्षम नहीं हूं कि डायरेक्टरी वैरिएबल का उपयोग कैसे करें लूप के लिए दूसरा यह जांचने के लिए कि यह अंतिम निर्देशिका है या नहीं। ऐसा कैसे किया जा सकता था?

1
Shetu Raj 16 पद 2020, 10:37

2 जवाब

सबसे बढ़िया उत्तर

बिल्ट-इन मॉड्यूल pathlib का इस्तेमाल करने का तरीका यहां दिया गया है:

  • पथ उदाहरण के साथ लक्ष्य निर्देशिका से सभी फ़ाइलों को पुनरावर्ती रूप से पुनरावृत्त करता है।
  • सभी गैर-निर्देशिकाओं को अनदेखा करें।
  • यदि पथ का जनक पहले से ही सूची में है तो हम उस माता-पिता को हटा देते हैं।
  • सूची में ही पथ जोड़ें।
import pathlib

paths = []
for path in pathlib.Path("current_dir").rglob("*"):
    if path.is_dir():
        if path.parent in paths:
            paths.remove(path.parent)
        paths.append(path)

आपको सूची दे रहा है paths जिसमें प्रत्येक 'अंतिम-स्तर' फ़ोल्डर के पथ शामिल हैं

1
Mandera 16 पद 2020, 10:59

os.walk() से लौटाई गई निर्देशिका सूची निर्देशिका नामों की एक सूची है जो वर्तमान निर्देशिका में मौजूद है। इसलिए यदि वर्तमान पथ में कोई निर्देशिका नहीं है, तो यह खाली हो जाएगी।

path = os.walk('/current_dir')

for root, directories, files in path:
    if  not directories:  #you can check whether a list is empty like that
        #create your file in the current path you checked, it is stored in root variable.
        pass
        
       
    

संपादित करें: मेरा बुरा, अजगर में नहीं ऑपरेटर "नहीं" है। मैंने लिखा "!" गलती से।

2
The Niv 16 पद 2020, 11:43