Python 内置 os.walk() 方法遍历指定路径所有内容

本文记录了 Python 内置 os.walk() 方法遍历指定路径所有文件和文件夹的相关代码。

前言

项目中有个功能需要遍历指定路径下的文件内容,而 Python 有个内置的 os.walk 方法可以达到这个目的。

以下为 Python 文档中对于 os.walk 的说明。

Generate the file names in a directory tree by walking the tree either top-down or bottom-up. For each directory in the tree rooted at directory top (including top itself), it yields a 3-tuple (dirpath, dirnames, filenames).

本文来讲解一下 os.walk 方法的使用。

代码讲解

此部分正式开始 os.walk 方法的使用讲解。

官方代码

  • 首先来看一组官方的代码

    import os
    from os.path import join, getsize
    for root, dirs, files in os.walk('python/Lib/email'):
        print(root, "consumes", end=" ")
        print(sum(getsize(join(root, name)) for name in files), end=" ")
        print("bytes in", len(files), "non-directory files")
        if 'CVS' in dirs:
            dirs.remove('CVS')  # don't visit CVS directories
    
  • 此处解释一下代码中的变量含义:

    • root : 当前遍历的路径,字符串类型(当为 os.walk 传入相对路径时,该值为相对路径)
    • dirs : 当前遍历路径下的文件夹名称,列表类型
    • files : 当前遍历路径下的文件名称,列表类型
  • 再来看第二组官方提供的代码

    # Delete everything reachable from the directory named in "top",
    # assuming there are no symbolic links.
    # CAUTION:  This is dangerous!  For example, if top == '/', it
    # could delete all your disk files.
    import os
    for root, dirs, files in os.walk(top, topdown=False):
        for name in files:
            os.remove(os.path.join(root, name))
        for name in dirs:
            os.rmdir(os.path.join(root, name))
    

    这组代码的作用是删除指定路径下的所有文件

扩展代码

  • 理解了官方给的例子后,现在来改进封装一下
    from os import walk
    from os.path import join
    
    
    def get_local_files(path, file_type=None):
        """
        获取目标路径下所需要类型文件的完整路径
        :param path: 目标路径
        :param file_type: 所需要的文件类型,列表或元组
        :return: 完整的文件路径列表
        """
        local_files = []
        for root, dirs, files in walk(path):
            for file in files:
                file_path = join(root, file)
                if file_type is None:
                    local_files.append(file_path)
                elif file_path.split('.')[-1] in file_type:
                    local_files.append(file_path)
        return local_files
    
    
    if __name__ == '__main__':
        curr_files = get_local_files(r'C:\Users\dancy\Documents\Adobe', ['jpg', 'png'])
        for i in curr_files:
            print(i)
    

总结

os.walk 函数返回的是一个 generator 类型,需要使用 for 循环取出其中的数据。

os.walk 的其它参数(topdownonerrorfollowlinks)用的较少,有需要的可以自行研究。

参考链接

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇