python中os.walk()方法

os.walk(top, topdown=True, οnerrοr=None, followlinks=False)

  • 功能概要:通过自上而下或自下而上浏览目录树来生成目录树中的文件名;对于每一个目录,会产生一个三元组(dirpath, dirnames, filenames),dirpath是一个字符串,表示父目录名,dirnames是一个列表,里面存储着父目录dirpath中所有的子目录,filenames是一个列表,存储着父目录dirpath中所有的文件;注意,列表中的名称不包含路径成分。如果需要得到完整的路径(不一定是绝对路径),可以通过代码os.path.join(dirpath, name)来得到。

  • 参数:

    • 第一个参数top,必选参数:传入一个字符串,这个字符串是一个目录。os.walk()方法会遍历top目录下所有的子目录和文件,并将它们用三元组(dirpath, dirnames, filenames)的形式返回,如下所示。

      目录结构如下图:
      在这里插入图片描述

      测试代码如下:

      # coding=utf-8
      
      import os
      
      
      # 遍历文件夹
      def walk_file(directory):
          for root, dirs, files in os.walk(directory):
      
              # 遍历文件
              for f in files:
                  # 在windows机器上运行的,需要用gbk进行解码
                  print os.path.join(root, f).decode('cp936')
      
              # 遍历所有的文件夹
              for d in dirs:
                  # 在windows机器上运行的,需要用gbk进行解码
                  print os.path.join(root, d).decode('cp936')
      
      
      def main():
          walk_file('top')
      
      
      if __name__ == '__main__':
          main()
      
          
      '''output
      top\文件1.txt
      top\文件2.txt
      top\父目录
      top\父目录\子目录1
      top\父目录\子目录2
      '''
      

      上图中传入的是一个相对路径,即和执行的python文件处在同一位置的top目录;输出的结果是把top目录里面所有的子目录和文件都遍历了一遍。

    • 第二个参数topdown,可选参数:传入一个bool类型,缺省是True。如果可选参数topdownTrue或未指定,则在其任何子目录的三元组之前生成目录的三元组(目录是自上而下生成的)。如果topdownFalse,则在其所有子目录的三元组之后生成目录的三元组(目录是自下而上生成的)。 上面的代码已经测试了可选参数topdownTrue的情况,下面来测试一下可选参数topdownFalse的情况。代码如下:

      # coding=utf-8
      
      import os
      
      
      # 遍历文件夹
      def walk_file(directory):
          for root, dirs, files in os.walk(directory, topdown=False):
      
              # 遍历文件
              for f in files:
                  # 在windows机器上运行的,需要用gbk进行解码
                  print os.path.join(root, f).decode('cp936')
      
              # 遍历所有的文件夹
              for d in dirs:
                  # 在windows机器上运行的,需要用gbk进行解码
                  print os.path.join(root, d).decode('cp936')
      
      
      def main():
          walk_file('top')
      
      
      if __name__ == '__main__':
          main()
          
      
      '''output
      top\父目录\子目录1
      top\父目录\子目录2
      top\文件1.txt
      top\文件2.txt
      top\父目录
      '''
      

      可以看到当可选参数topdownTrue的时候,top\父目录top\父目录\子目录1top\父目录\子目录2之前就输出了,而当可选参数topdownFalse的时候,top\父目录top\父目录\子目录1top\父目录\子目录2之后才输出。这就是这个参数topdownTrueFalse的区别。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值