2012-03-31 68 views
2

函数在python中返回主井的位置。python,return的位置和文件大小

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

三个位置 “回归” 是不是我想要的。

我想造成“所有在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

但是,如何实现用下面的代码上面的功能呢?如何修改它?


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

回答

5

返回一个列表路径,而不是只有一个路径:

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

你也可以使用yield内环内得到发电机的功能,请参阅The Python yield keyword explained

1

你想要的是一个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

这里有3种方式,如果你只需要为/ home/BB/C目录中列出

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/*')