2011-02-07 9 views
9

मेरे पास एक निर्देशिका लॉगफाइल है। मैं एक पायथन स्क्रिप्ट का उपयोग कर इस निर्देशिका के अंदर प्रत्येक फ़ाइल को संसाधित करना चाहता हूं।निर्देशिका में फ़ाइलों के माध्यम से कैसे पार करें?

for file in directory: 
     # do something 

मैं यह कैसे कर सकता हूं?

उत्तर

16

os.listdir() या os.walk() के साथ, इस पर निर्भर करता है कि आप इसे दोबारा करना चाहते हैं या नहीं।

import os.path 
def print_it(x, dir_name, files): 
    print dir_name 
    print files 

os.path.walk(your_dir, print_it, 0) 

नोट::

6

आप की तरह कुछ कोशिश कर सकते हैं os.path.walk 3 तर्क आप जो कुछ भी करना चाहते हैं। आप कॉलबैक के 1 आर्ग के रूप में यह मिल जाएगा

+0

हालांकि इस काम करेंगे की वजह से कैसे '' os' path' संभालती है, आप * चाहिए * हमेशा आयात 'स्पष्ट रूप os.path'। –

+0

तय! इस टिप्पणी के लिए धन्यवाद। – luc

+1

@Ignacio Vazquez-Abrams: 'os' एक मॉड्यूल है (पैकेज नहीं)। Python 2.4-3.2, jython, pypy पर 'आयात os' काम करता है। आपको os.path आयात करने की आवश्यकता क्यों है? – jfs

2

आप glob की कोशिश कर सकते: (के रूप में मैं जानता हूँ कि जहाँ तक)

import glob 

for file in glob.glob('log-*-*.txt'): 
    # Etc. 

लेकिन glob रिकर्सिवली काम नहीं करता है, तो आपके लॉग फ़ोल्डर में हैं, तो उस निर्देशिका के अंदर, आप Ignacio Vazquez-Abrams पर पोस्ट करने से बेहतर होंगे।

3
import os 
# location of directory you want to scan 
loc = '/home/sahil/Documents' 
# global dictonary element used to store all results 
global k1 
k1 = {} 

# scan function recursively scans through all the diretories in loc and return a dictonary 
def scan(element,loc): 

    le = len(element) 

    for i in range(le): 
     try: 

      second_list = os.listdir(loc+'/'+element[i]) 
      temp = loc+'/'+element[i] 
      print "....." 
      print "Directory %s " %(temp) 
      print " " 
      print second_list 
      k1[temp] = second_list 
      scan(second_list,temp) 

     except OSError: 
      pass 

    return k1 # return the dictonary element  


# initial steps 
try: 
    initial_list = os.listdir(loc) 
    print initial_list 
except OSError: 
    print "error" 


k =scan(initial_list,loc) 
print " ..................................................................................." 
print k 

मैं अपने ऑडियो प्लेयर के लिए एक प्लेलिस्ट सुविधा बनाने के लिए एक निर्देशिका स्कैनर के रूप में इस कोड बना दिया और इसे रिकर्सिवली सभी उप निर्देशिका में मौजूद निर्देशिकाओं को स्कैन करेगा।

+0

एफवाईआई: कोड के लिए 4 रिक्त स्थान इंडेंट करें या '{}' बटन का उपयोग करें - अधिक के लिए http://stackoverflow.com/editing-help देखें – McDowell

1

आप एक से अधिक फ़ाइल प्रकारों के लिए जाँच करने के लिए की जरूरत है, का उपयोग

glob.glob("*.jpg") + glob.glob("*.png") 

Glob सूची में फ़ाइलों के आदेश के बारे में परवाह नहीं है। आप फ़ाइल नाम के अनुसार क्रमबद्ध फ़ाइलों की जरूरत है, का उपयोग

sorted(glob.glob("*.jpg")) 
2

आप रिकर्सिवली इस तरह की एक निर्देशिका से हर फ़ाइल सूचीबद्ध कर सकते हैं।

from os import listdir 
from os.path import isfile, join, isdir 

def getAllFilesRecursive(root): 
    files = [ join(root,f) for f in listdir(root) if isfile(join(root,f))] 
    dirs = [ d for d in listdir(root) if isdir(join(root,d))] 
    for d in dirs: 
     files_in_d = getAllFilesRecursive(join(root,d)) 
     if files_in_d: 
      for f in files_in_d: 
       files.append(join(root,f)) 
    return files 
2
import os 
rootDir = '.' 
for dirName, subdirList, fileList in os.walk(rootDir): 
    print('Found directory: %s' % dirName) 
    for fname in fileList: 
     print('\t%s' % fname) 
    # Remove the first entry in the list of sub-directories 
    # if there are any sub-directories present 
    if len(subdirList) > 0: 
     del subdirList[0] 

संबंधित मुद्दे

 संबंधित मुद्दे