2011-03-01 4 views
9

मैं अभी भी पाइथन (2.6 का उपयोग करके) के लिए नया हूं और मैं एक फ़ाइल के लिए सिस्टम विस्तृत खोज करने की कोशिश कर रहा हूं बस फ़ाइल नाम उपलब्ध है और विंडोज़ पर पूर्ण पथ लौटाता है। मैंने scriptutil.py जैसे कुछ मॉड्यूल खोजे और पाया है और ओएस मॉड्यूल के माध्यम से देखा है लेकिन मेरी ज़रूरतों के अनुरूप कुछ भी नहीं मिला है (या मुझे जो भी चाहिए उसे लागू करने के लिए मैं सब कुछ सही ढंग से समझ नहीं पाया हो सकता है और इस प्रकार मैंने कोई भी शामिल नहीं किया है कोड)। किसी भी सहायता के लिए धन्यवाद।पायथन: फ़ाइल फ़ाइल के लिए सिस्टम विस्तृत खोज कैसे करें जब फ़ाइल नाम (पथ नहीं) उपलब्ध है

धन्यवाद।

उत्तर

15

os.walk() फ़ंक्शन इसे करने का एक तरीका है।

import os 
from os.path import join 

lookfor = "python.exe" 
for root, dirs, files in os.walk('C:\\'): 
    print "searching", root 
    if lookfor in files: 
     print "found: %s" % join(root, lookfor) 
     break 
+1

@ मार्टिन स्टोन हाँ, यह है, लेकिन यह एक पथ की आवश्यकता है, वरना खोजें केवल वर्तमान कार्यशील निर्देशिका है (अगर मैं सही ढंग से समझ) – ldmvcd

+0

@ldmvcd, यह निर्देशिका आपको बता उस में शुरू करने के लिए से रिकर्सिवली खोज –

+0

@ मार्टिन स्टोन ** ब्रेक ** हटाया जाना चाहिए, क्योंकि अलग-अलग निर्देशिकाओं में एक ही नाम के साथ कई फाइलें हो सकती हैं – eyquem

4

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

os.path.walk(rootdir,f,arg) 

एक समान प्रश्न here के लिए एक अच्छा जवाब है और इस काम की तरह एक दूसरे से here

+0

लिंक के लिए धन्यवाद, वे उपरोक्त पोस्ट की तरह ही सहायक थे। – ldmvcd

+0

'os.path.walk' का उपयोग करके, जिसके लिए 3 तर्कों की आवश्यकता है, को othwalk' के पक्ष में पायथन 2.3 (और पूरी तरह से 3.0 में हटा दिया गया) के बाद से हटा दिया गया है, जिसके लिए केवल 1 तर्क (और 3 वैकल्पिक है) की आवश्यकता है। – ArtOfWarfare

0

कुछ चाहेंगे नहीं है?

import os 
import sys 
import magic 
import time 
import fnmatch 

class FileInfo(object): 

    def __init__(self, filepath): 
     self.depth = filepath.strip('/').count('/') 
     self.is_file = os.path.isfile(filepath) 
     self.is_dir = os.path.isdir(filepath) 
     self.is_link = os.path.islink(filepath) 
     self.size = os.path.getsize(filepath) 
     self.meta = magic.from_file(filepath).lower() 
     self.mime = magic.from_file(filepath, mime=True) 
     self.filepath = filepath 


    def match(self, exp): 
     return fnmatch.fnmatch(self.filepath, exp) 

    def readfile(self): 
     if self.is_file: 
      with open(self.filepath, 'r') as _file: 
       return _file.read() 

    def __str__(self): 
     return str(self.__dict__) 



def get_files(root): 

    for root, dirs, files in os.walk(root): 

     for directory in dirs: 
      for filename in directory: 
       filename = os.path.join(root, filename) 
       if os.path.isfile(filename) or os.path.isdir(filename): 
        yield FileInfo(filename) 

     for filename in files: 
      filename = os.path.join(root, filename) 
      if os.path.isfile(filename) or os.path.isdir(filename):    
       yield FileInfo(filename) 


for this in get_files('/home/ricky/Code/Python'): 
    if this.match('*.py'): 
     print this.filepath 
संबंधित मुद्दे