2012-03-31 10 views
2

Funktionen geben die Position von Master in Python zurück.python, return's position und filesize

def myPath(): 
    for root,dirs,files in os.walk(dir): 
     for fn in files: 
      path = os.path.join(root, fn) 
      return path 
     return path 
    return path
ls /home/bb/C/ 
a.out main.c simple_write t.c

Drei Positionen "Rückkehr" ist nicht das, was ich will. erhalten führen „Alle Dateien im Verzeichnis C“

def filesize(path): 
    for root, dirs, files in os.walk(PATH): 
     for fn in files: 
      path = os.path.join(root, fn) 
      size = os.stat(path).st_size 
      yield size,path 

for size,path in filesize(PATH): 
     print size,path

aber, wie zur Erreichung der oben genannten Funktionen mit dem folgenden Code

ich will? Wie man es ändert?


def find(path): 
    return [os.path.join(root,fn) 
     for root,dir,files in os.walk(dirs) 
     for fn in files]

Antwort

5

Gibt eine Liste der Wege, nicht nur einen einzigen Weg:

def find(path): 
    return [os.path.join(root, fn) 
      for root, dirs, files in os.walk(path) 
      for fn in files] 

Sie auch yield innerhalb der inneren Schleife verwenden, könnte eine Generatorfunktion zu erhalten, siehe The Python yield keyword explained.

1

Was Sie wollen, ist ein generator:

def myPath(mydir): 
    for root,dirs,files in os.walk(mydir): 
     for fn in files: 
      path = os.path.join(root, fn) 
      yield path # <----- Instead of return 


for path in myPath(some_dir): 
    print path 
0

Hier 3 Möglichkeiten, wenn Sie nur die/home/bb/C Verzeichnis

import os, glob 

def listWithoutDirectories(path): 
    return [os.path.join(root,fn) 
     for root,dirs,files in os.walk(mydir) 
      if(root==path) 
       for fn in files] 

def listWithDirectories(path) 
    return [os.path.join(path,fn) 
     for fn in os.listdir(path)] 


print listWithoutDirectories('/home/bb/C') 
print listWithDirectories('/home/bb/C') 
#Or with a glob 
print glob.glob('/home/bb/C/*') 
aufgeführt brauchen