当前位置:   article > 正文

遍历文件夹所有文件,只需3行Python代码?!_遍历文件夹内所有文件

遍历文件夹内所有文件

今天分享的话题是“遍历所有文件”。

数据处理过程中往往拥有大量的文件,而各个文件可能又放在不同文件夹中。

因此一个一个文件去打开关闭获取数据,那效率太低了。

在一般情况下,我们遍历一个文件夹中所有的文件的方法是:

1. 打开文件夹,判断是否存在文件和子文件夹,输出文件路径;

2. 继续遍历子文件夹,判断里面是否存在文件或文件夹;

3. 遍历到子文件中的只存在文件时,返回上级目录,继续重复上述1~2,直到遍历完所有文件夹。

那么,用code实现上述过程具体如下:


def get_all_file(directory):
    os.chdir(directory)  # 改变工作目录
    for each_file in os.listdir(os.curdir):
        if os.path.isfile(each_file):
            print(os.getcwd() + os.sep + each_file)
        if os.path.isdir(each_file):
            get_all_file(each_file)  # 递归调用
            os.chdir(os.pardir)   # 递归调用结束返回上一级目录
directory = r"F:\test"
get_all_file(directory)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

上述code我们一共用到了7个os函数,具体的用法可以看我上期的文章,在这里不过多赘述。

其实从code可以直观看出,遍历文件夹的过程就是递归操作。

并且最重要的是每次遍历完内部文件夹后必须要返回上一层级。

整个过程还是挺复杂的~


那么,今天分享一个只需3行代码搞定文件夹中所有文件的方法!


for root, dirs, files in os.walk(directory):
    for file in files:
        print(os.path.join(root, file))
  • 1
  • 2
  • 3
  • 4

在code中用到了一个os.walk()方法,它主要用于遍历目录和其子目录,并返回一个三元组 (root, dirs, files) 的生成器。

函数语法:

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

参数详解:

top:必需参数,需要遍历的目录路径。

topdown:可选参数,若设置为 True(默认值),则遍历会按照目录树自上而下的顺序进行。若设置为 False,则遍历顺序会根据文件系统的实际情况来决定。

onerror:可选参数,当在遍历过程中遇到错误时,此参数定义的处理函数会被调用。默认情况下,如果遇到错误会抛出异常。

followlinks:可选参数,若设置为 True,则会遍历目录下的符号链接子目录;若设置为 False,则忽略它们。

返回值:

os.walk() 函数每次迭代都会返回当前目录的路径(root)、子目录列表(dirs)和文件列表(files)。

root:代表当前遍历的目录路径,是字符串类型。

dirs:代表 root 路径下的所有子目录名称,是列表类型,列表中的每个元素是字符串类型,代表子目录名称。

files:代表 root 路径下的所有子文件名称,返回列表类型,列表中的每个元素是字符串类型,代表子文件名称。

假设你有一个文件夹,其目录结构如下:

test/

  dir1/  

      file1.txt

      file2.txt

  dir2/

       file3.txt

  file4.txt
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

你可以使用以下代码来遍历这个文件夹:


import os    
for root, dirs, files in os.walk("test"):
      print("现在的目录:", root)
      print("该目录下包含的子目录:", dirs)
      print("该目录下包含的文件:", files)
      print("="*20)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

输出将会是:


现在的目录: test  
该目录下包含的子目录: ['dir1', 'dir2']  
该目录下包含的文件: ['file4.txt']  
====================  
现在的目录: test/dir1  
该目录下包含的子目录: []  
该目录下包含的文件: ['file1.txt', 'file2.txt']  
====================  
现在的目录: test/dir2  
该目录下包含的子目录: []  
该目录下包含的文件: ['file3.txt']  
====================
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

写在最后

os.walk() 函数以一种深度优先的策略(depth-first)访问指定的目录,首先访问当前目录,然后递归地访问其子目录。

在遍历过程中,它会返回当前目录的路径、子目录列表和文件列表,使得你可以对这些信息进行进一步的处理。

以上为今天的全部分享,希望对你有用。

关于Python学习指南

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/716077

推荐阅读
相关标签