【问题标题】:python ,return's position and filesizepython,返回位置和文件大小
【发布时间】:2012-04-14 18:01:58
【问题描述】:

函数返回主井在python中的位置。

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]

【问题讨论】:

    标签: python return


    【解决方案1】:

    返回路径的列表,而不仅仅是单个路径:

    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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        如果您只需要列出的 /home/bb/C 目录,这里有 3 种方法

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

        【讨论】:

          猜你喜欢
          • 2014-04-21
          • 1970-01-01
          • 2014-06-29
          • 2021-08-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-02-29
          • 2020-03-01
          相关资源
          最近更新 更多