使用os.walk()方法

本文介绍如何利用Python的os模块中的walk函数遍历指定目录及其子目录下的特定类型文件,包括不同磁盘分区的搜索,并展示了如何结合正则表达式进行精确匹配。
部署运行你感兴趣的模型镜像

递归遍历给定目录下的内容。(路径、路径下的文件夹、路径下的文件)

其中第一个为起始路径,

第二个为起始路径下的文件夹,

第三个是起始路径下的文件.

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

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

filenames是一个list包含了非目录文件的名字.这些名字不包含路径信息,如果需要得到全路径,需要使用 os.path.join(dirpath, name).


遍历 D盘sql、zip格式的文件

#coding:utf-8

import os
def main(name,*types):
    for root,dirs,files in os.walk(name):
        for f in files:
            if os.path.isfile(os.path.join(root,f)) and os.path.splitext(f)[1][1:] in types:
                print os.path.join(root,f)

if __name__ == '__main__':
    main(r"D:\\","sql","zip")

与线程一起:

#coding:utf-8
import threading
import os
import time
def main(name,*types):
    for root,dirs,files in os.walk(name):
        for f in files:
            if os.path.isfile(os.path.join(root,f)) and os.path.splitext(f)[1][1:] in types:
                print os.path.join(root,f)

if __name__ == '__main__':

    t1=time.time()
    #加入线程,搜索D盘 以.sql、.zip结尾的文件
    t = threading.Thread(target=main,args=(r"D:\\","sql","zip"))
    t.start()
    t.join()
    #计算执行时间
    print time.time()-t1


# 使用os.walk()方法输出E盘下的mp3文件
import os,re
p = re.compile('.*?\.mp3')
f = os.walk(r'E:\\')  #遍历E盘
result = []
for root,dirs,files in f:
    for m in files:
        if p.search(m):
            print os.path.join(root,m)
            result.append(os.path.join(root,m))

print len(result)


#使用os.walk()
import os

def getfile(path):

    for root,dirs,f in os.walk(path):

        for i in f :
            if i.split('.')[-1] in ('mp3','txt'):
                
                print os.path.join(root,i)

getfile(r"E:\\")


# 使用os.walk()方法输出指定盘符下的mp3文件

import os,re
p = re.compile('.*?\.mp3')


#指定遍历的盘符
disk = ['C:\\','D:\\','E:\\','G:\\']

result = []

def getmp3(): #定义函数
    for d in disk:
        f = os.walk(d)#遍历每个盘符

        for root,dirs,files in f:
            for m in files:
                if p.search(m):
                    print os.path.join(root,m)
                    result.append(os.path.join(root,m))
                    print len(result)


getmp3()


import os
def getmp3(disk):
    for root,dirs,files in os.walk(disk):
        for f in files:
            if os.path.splitext(f)[1][1:]=='mp3':
                print os.path.join(root,f)

if __name__=='__main__':
    import string
    for disk in map(lambda x:x+':\\',string.uppercase[2:6]): #变量盘符:C、D、E
        getmp3(disk)



您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

`os.walk()` 是 Python 中 `os` 模块的一个非常有用的函数,用于递归地遍历目录树。以下是该函数的详细使用说明: ### 函数签名 ```python os.walk(top, topdown=True, onerror=None, followlinks=False) ``` ### 参数解释 - `top`:要遍历的目录的根路径,可以是绝对路径或相对路径。 - `topdown`:一个布尔值,默认为 `True`。如果为 `True`,则先遍历根目录,再递归遍历子目录(即自上而下遍历);如果为 `False`,则先递归遍历子目录,最后遍历根目录(即自下而上遍历)。当 `topdown` 为 `True` 时,可以在遍历过程中修改 `dirs` 列表来控制后续要遍历的子目录;而当 `topdown` 为 `False` 时,修改 `dirs` 列表没有效果,因为子目录已经遍历过了。 - `onerror`:一个可选的错误处理函数,该函数接受一个 `OSError` 实例作为参数。如果在遍历过程中发生错误,会调用这个函数。如果没有提供该参数,则忽略错误。 - `followlinks`:一个布尔值,默认为 `False`。如果为 `True`,则会跟随符号链接并遍历链接指向的目录;如果为 `False`,则不会遍历符号链接指向的目录。 ### 返回值 `os.walk()` 是一个生成器函数,它会生成一个 3 元组 `(dirpath, dirnames, filenames)`,具体解释如下: - `dirpath`:一个字符串,表示当前正在遍历的目录的路径。 - `dirnames`:一个列表,包含当前目录下的所有子目录的名称(不包括 `.` 和 `..`)。 - `filenames`:一个列表,包含当前目录下的所有非目录文件的名称。 ### 示例代码 ```python import os from os.path import join, getsize # 遍历指定目录 for root, dirs, files in os.walk('python/Lib/email'): print(root, "consumes", end="") # 计算当前目录下所有文件的总大小 total_size = sum(getsize(join(root, name)) for name in files) print(total_size, end="") print("bytes in", len(files), "non-directory files") # 如果当前目录下有 'CVS' 子目录,则从 dirs 列表中移除,避免后续遍历 if 'CVS' in dirs: dirs.remove('CVS') ``` ### 代码解释 上述代码中,首先使用 `os.walk('python/Lib/email')` 遍历指定目录及其子目录。对于每个目录,打印出该目录的路径、该目录下所有文件的总大小以及文件的数量。同时,如果当前目录下存在 `CVS` 子目录,则将其从 `dirs` 列表中移除,这样后续就不会再遍历 `CVS` 目录了。 ### 注意事项 - 如果传递的 `top` 是相对路径,在遍历过程中不要改变当前工作目录,因为 `os.walk()` 不会改变当前工作目录,并且假设调用者也不会改变。 - 当 `followlinks` 为 `True` 时,要注意可能会出现循环引用的情况,导致无限递归。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值