赞
踩
今天分享的话题是“遍历所有文件”。
数据处理过程中往往拥有大量的文件,而各个文件可能又放在不同文件夹中。
因此一个一个文件去打开关闭获取数据,那效率太低了。
在一般情况下,我们遍历一个文件夹中所有的文件的方法是:
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)
上述code我们一共用到了7个os函数,具体的用法可以看我上期的文章,在这里不过多赘述。
其实从code可以直观看出,遍历文件夹的过程就是递归操作。
并且最重要的是每次遍历完内部文件夹后必须要返回上一层级。
整个过程还是挺复杂的~
那么,今天分享一个只需3行代码搞定文件夹中所有文件的方法!
for root, dirs, files in os.walk(directory):
for file in files:
print(os.path.join(root, file))
在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)
输出将会是:
现在的目录: test
该目录下包含的子目录: ['dir1', 'dir2']
该目录下包含的文件: ['file4.txt']
====================
现在的目录: test/dir1
该目录下包含的子目录: []
该目录下包含的文件: ['file1.txt', 'file2.txt']
====================
现在的目录: test/dir2
该目录下包含的子目录: []
该目录下包含的文件: ['file3.txt']
====================
写在最后
os.walk() 函数以一种深度优先的策略(depth-first)访问指定的目录,首先访问当前目录,然后递归地访问其子目录。
在遍历过程中,它会返回当前目录的路径、子目录列表和文件列表,使得你可以对这些信息进行进一步的处理。
以上为今天的全部分享,希望对你有用。
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。