2011-04-28 20 views
31

में फ़ाइलें और सबफ़ोल्डर ब्राउज़ करें मैं वर्तमान फ़ोल्डर और उसके सभी सबफ़ोल्डर के माध्यम से ब्राउज़ करना चाहता हूं और सभी फ़ाइलों को .htm | .html एक्सटेंशन के साथ प्राप्त करना चाहता हूं। मुझे पता चला है कि यह पता लगाने के लिए एक वस्तु एक निर्देशिका या इस तरह फ़ाइल है कि क्या संभव है:पायथन

import os 

dirList = os.listdir("./") # current directory 
for dir in dirList: 
    if os.path.isdir(dir) == True: 
    # I don't know how to get into this dir and do the same thing here 
    else: 
    # I got file and i can regexp if it is .htm|html 

और अंत में, मैं सभी फ़ाइलें और एक सरणी में उनके रास्ते करना चाहते हैं। क्या ऐसा कुछ संभव है?

+0

संभव डुप्लिकेट [एक निर्देशिका में फ़ाइलों के माध्यम से पार करने के लिए कैसे?] (Http://stackoverflow.com/questions/ 4918458/कैसे-टू-ट्रैवर्स-थ्रू-द-फाइल-इन-ए-डायरेक्टरी) –

+3

अभी तक इसका उत्तर बहुत छोटा और बेहतर है। – Blackie123

उत्तर

84

आप हमें os.walk() रिकर्सिवली एक निर्देशिका के माध्यम से पुनरावृति करने के लिए कर सकते हैं और अपने सभी उपनिर्देशिका:

htmlfiles = [os.path.join(root, name) 
      for root, dirs, files in os.walk(path) 
      for name in files 
      if name.endswith((".html", ".htm"))] 
2

उपयोग newDirName = os.path.abspath(dir):

for root, dirs, files in os.walk(path): 
    for name in files: 
     if name.endswith((".html", ".htm")): 
      # whatever 

इन नामों की सूची बनाने के लिए, आप एक सूची समझ का उपयोग कर सकते उपनिर्देशिका के लिए एक पूर्ण निर्देशिका पथ नाम बनाने के लिए और उसके बाद अपनी सामग्री को सूचीबद्ध करें जैसा कि आपने माता-पिता के साथ किया है (यानी newDirList = os.listDir(newDirName))

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

यह उत्तर पायथन पुस्तकालय के 3.1.1 संस्करण दस्तावेज़ पर आधारित है। पाइथन 3.1.1 लाइब्रेरी रेफरेंस (अध्याय 10 - फाइल और डायरेक्टरी एक्सेस) के पेज 228 पर कार्रवाई में इसका एक अच्छा मॉडल उदाहरण है। शुभकामनाएँ!

-2

स्वेन Marnach के समाधान के थोड़ा बदल संस्करण ..


import os

folder_location = 'C:\SomeFolderName' file_list = create_file_list(folder_location)

def create_file_list(path): return_list = []

for filenames in os.walk(path): for file_list in filenames: for file_name in file_list: if file_name.endswith((".txt")): return_list.append(file_name) return return_list

की
+0

किसी कारण से अतिरिक्त रिक्त स्थान हैं और ब्लॉक इंडेंटेशन के लिए उपरोक्त पेस्ट में सही नहीं है .. एसओ का मार्कअप मुझे पसंद नहीं करता है .. – campervancoder

+2

सरल कोड की खराब पुनर्विक्रय - एम्बेडेड लूप के साथ ट्यूपल असाइनमेंट को प्रतिस्थापित करने से कोड कम पठनीय हो जाता है, और शायद कम कुशल भी – volcano

+0

टिप्पणी @ volcano टिप्पणी के लिए धन्यवाद .. उपरोक्त उदाहरण लूप के लिए अतिरिक्त काम नहीं कर रहा था .. – campervancoder