【Python收集系统信息】os.walk模块的使用

python中os.walk是一个简单易用的文件、目录遍历器,可以帮助我们高效的处理文件、目录方面的事情。

1.载入


要使用os.walk,首先要载入该函数

可以使用以下两种方法

  • import os
  • from os import walk

2.使用

os.walk的函数格式声明为:

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

参数

  • top 是你所要遍历的目录的地址
  • topdown 为真,则优先遍历top目录,否则优先遍历top的子目录(默认为开启)
  • onerror 需要一个 callable 对象,当walk需要异常时,会调用
  • followlinks 如果为真,则会遍历目录下的快捷方式(linux 下是 symbolic link)实际所指的目录(默认关闭)

os.walk 的返回值是一个生成器(generator),也就是说我们需要不断的遍历它,来获得所有的内容。

可以得到一个三元tupple(dirpath, dirnames, filenames), 

第一个为起始路径,第二个为起始路径下的文件夹,第三个是起始路径下的文件。

dirpath 是一个string,代表目录的路径,

dirnames 是一个list,包含了dirpath下所有子目录的名字。

filenames 是一个list,包含了非目录文件的名字。
 

如果topdown 参数为真,walk 会遍历top文件夹,与top文件夹中每一个子目录。

3.举例子:

文件结构如下:

 a ->      b   ->   1.txt,  2.txt
             c   ->   3.txt
             d   ->   
            4.txt
            5.txt

使用os.walk做遍历:

for (root, dirs, files) in os.walk('a'):
    #第一次运行时,当前遍历目录为 a
    所以 root == 'a'
            dirs == [ 'b', 'c', 'd']
            files == [ '4.txt', '5.txt']
    
    。。。

    # 接着遍历 dirs 中的每一个目录
    b:  root  = 'a\\b'
         dirs  = []
         files = [ '1.txt', '2.txt']
    
    # dirs为空,返回
    # 遍历c
    c:  root  = 'a\\c'
         dirs  = []
         files = [ '3.txt' ]
    
    PS : 如果想获取文件的全路径,只需要 
    for f in files:
        path = os.path.join(root,f)
    
    # 遍历d
    d:  root  = 'a\\b'
         dirs  = []
         files = []

    遍历完毕,退出循环
 

4.实战案例

使用一个实战案例加深对os.walk模块的认识。

我们在/tmp目录下建立一个file目录,里面的组织结构如下:

 

import os
path = '/tmp/file'
for p,d,f in os.walk(path):
    print(p,d,f)

os.walk返回的是1个元组,这个元组有3个元素,分别是dirpath, dirnames, filenames,所以使用3个变量p,d,f去接收这3个元素,即for p,d,f in os.walk(path)

os.walk输入一个路径名称,以yield的方式(其实是一个生成器)返回一个三元组 dirpath, dirnames, filenames,

dirpath为目录的路径,为一个字符串。比如上面的/tmp/file和/tmp/file/file1等。

dirnames列出了目录路径下面所有存在的目录的名称。比如在 /tmp/file下面有两个目录:file1和file2,那么它就列出了这个目录路径下的目录名称。

filenames列出了目录路径下面所有文件的名称。同样在  /tmp/file下面有两个文件file_test2.txt 和 file_test1.txt,那么程序将会列出这两个文件名。

如何获得一个路径下面所有的文件路径:

import os
path = '/tmp/file'
for p,d,f in os.walk(path):
    for filename in f:
        print(os.path.join(p,filename))


f 是个列表,所以对f进行for循环遍历,取里面的每一个文件名,最后把文件名组织成带路径的,即os.path.join(p,filename)。
dirnames也是一个列表,每个元素是目录名,这里没打印目录名。

参考文章:https://www.cnblogs.com/jiaxin359/p/7324077.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr. Sun_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值