专栏首页极客猴Python 三种遍历目录的方法,轻松帮你找出隐藏文件

Python 三种遍历目录的方法,轻松帮你找出隐藏文件

阅读文本大概需要 6 分钟。

无论在 Windows 系统中还是 Linux 系统中,都存在着隐藏文件以及隐藏文件夹。隐藏文件夹一般是系统关键性目录,例如 Windows 系统中的 C 盘中的 Boot 文件夹Windows 文件夹等。在 Linux 系统中,一些系统配置文件或软件配置文件会被隐藏起来,如:系统环境变量配置文件 .profile。有些时候,我们必须通过文件路径来遍历整个目录,然后找到隐藏文件。本文的主要内容是给大家分享 Python 三种遍历文件的方法。

01

简单暴力法-递归

假设在 E 盘中,有个名为“Python”的文件夹;该文件夹中也有两个文件夹,分别是“A”和“B”;另外,在“A”文件夹中还有一个 “results.txt” 的文本文件。因此,“Python”文件夹的文件结构如下:

Python
|--A
|  |--results.txt
|--B

我们可以从上述看出,一个文件夹其实是一个树型的数据结构。遍历树的最简单、最暴力的办法就是递归。因此,遍历“Python”的文件夹的代码可以这么写。

# -*- coding: UTF-8 -*-
import os

# 递归遍历目录
def traversal_files(path):
    for dir in os.listdir(path):
        dir = os.path.join(path, dir)
        print(dir)
        # 判断当前目录是否为文件夹
        if os.path.isdir(dir):
            traversal_files(dir)

if __name__ == '__main__':
    path = '.'
    traversal_files(path)

运行脚本程序后,发现“Python”中的文件和文件夹都被打印出来。

这种遍历方法能否找出隐藏文件?答案是肯定能。让我们来验证一番。首先,我们在“Python”的文件夹中放入一个“config.txt”的隐藏文件。

然后再运行程序,结果发现“config.txt”被打印出来。

这种办法虽然写起来代码简洁,但是在文件夹的子目录层级过深的情况下,效率会比较低。

02

优雅的 os.walk()

既然递归太暴力,那么使用 os.walk() 会让程序显得优雅。os.walk() 方法是一个简单易用的文件、目录遍历器,可以帮助我们高效的处理文件、目录方面的事情。这个方法适用于在 Linix 和 Windows。

os.walk() 一般用法是传入两个参数。第一个参数是 path, 即所要遍历的目录的地址。它返回的是一个三元组(root, dirs, files)。

  • root 所指的是当前正在遍历的这个文件夹的本身的地址
  • dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)
  • files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)

第二个参数是topdown,它是一个可选参数。当它的值为 True 时,则优先遍历 path 目录,否则优先遍历 top 的子目录(默认为开启)。

因此,使用 os.walk 遍历文件夹,找出隐藏文件的代码如下所示。

# -*- coding: UTF-8 -*-
import os

def traversal_files(path):
    for root, dirs, files in os.walk(path, topdown=False):
        for name in files:
            print(os.path.join(root, name))
        for name in dirs:
            print(os.path.join(root, name))

if __name__ == '__main__':
    path = '.'
    traversal_files(path)

03高效的 os.scandir()

在 Python 3.5版本中,新添加了 os.scandir()方法,它是一个目录迭代方法。os.scandir() 的运行效率要比 os.walk 高。在 PEP 471 中,Python 官方也推荐我们使用 os.scandir() 来遍历目录。

按照前面的例子,遍历“Python”的文件夹中的隐藏文件的代码如下:

# -*- coding: UTF-8 -*-
import os

dirs = []
files = []

def traversal_files(path):
    for item in os.scandir(path):
        if item.is_dir():
            dirs.append(item.path)
        elif item.is_file():
            files.append(item.path)

    print('dirs:', dirs)
    print('files:', files)

if __name__ == '__main__':
    path = '.'
    traversal_files(path)

运行结果,同样也是能找出隐藏文件。

本文分享自微信公众号 - 极客猴(Geek_monkey)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-11-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • os.path 模块用法详解

    总所周知,Windows 操作系统和 Linux 系统存在很多不兼容的地方。文件路径就是一个明显的例子。在 Linux 中,路径的分割采用正斜杠 "/",比如 ...

    猴哥yuri
  • 高效利用Bitmap

    上面的代码经常在我们的项目中出现。你可知其背后的处理逻辑? 根据源码可知,上面的代码中两个方法setBackgroundResource()和setImage...

    猴哥yuri
  • 详解安卓的ClassLoader

    众所周知,Java程序运行过程是这样的。首先,Java源码编译器将java文件编译成二进制的字节码class文件。然后,Java虚拟机再运行class文件。cl...

    猴哥yuri
  • iOS读写安全

    给属性添加atomic 可以保证属性的setter和getter原子性操作,也就是保证setter和getter内部是线程同步的

    老沙
  • 用 Python 批量把文件复制到另一

    大概是三个月前,有个人找我说要我帮忙写几行代码,功能是把一个文件夹里面的所有文件拆分成 200 个文件一个文件夹,很简单的。

    py3study
  • 用 Python 批量把文件复制到另一个文件夹

    大概是三个月前,有个人找我说要我帮忙写几行代码,功能是把一个文件夹里面的所有文件拆分成 200 个文件一个文件夹,很简单的。

    伪君子
  • python利用os模块编写文件复制功能——copy()函数用法

    以上这篇python利用os模块编写文件复制功能——copy()函数用法就是小编分享给大家的全部内容了,希望能给大家一个参考。

    砸漏
  • 关于python中的IO流

    只要有IO,那么就会发生IOError。所以尽量每次都要使用try...finally

    py3study
  • python按顺序重命名文件并分类转移到各个文件夹中的实现代码

    系统 ubuntu20.04 工具 python 要求 文件夹中有22个子文件夹,每个子文件又包含56个文件,要求将每个子文件夹中的第一个文件放到一个...

    砸漏
  • os.path 模块用法详解

    总所周知,Windows 操作系统和 Linux 系统存在很多不兼容的地方。文件路径就是一个明显的例子。在 Linux 中,路径的分割采用正斜杠 "/",比如 ...

    猴哥yuri

扫码关注云+社区

领取腾讯云代金券