当前位置:   article > 正文

python遍历文件夹下所有文件_python遍历文件夹所有文件

python遍历文件夹所有文件

话不多说,上代码:

遍历文件内的所有文件(包括子目录内的文件)

import os

file = r'D:\dataset\makelabels\demo'

for root, dirs, files in os.walk(file):
    for file in files:
        path = os.path.join(root, file)
        print(path)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

只遍历根目录下的文件(不包括子目录内的文件)

import os

file = r'D:\dataset\makelabels\demo'

for root, dirs, files in os.walk(file):
    if root != file:
        break
    for file in files:
        path = os.path.join(root, file)
        print(path)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

新版讲解

以前写的旧版讲解太繁琐了,重写一版本。

演示的文件结构:

--demo(dir)
	--test1(dir)
		--a(dir)
			--aa(dir)
		--b(dir)
		--c(dir)
	--test2(dir)
		--2.txt
	--1.txt
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

首先我们打印root信息:

import os
file = r'D:\dataset\makelabels\demo'
for root, dirs, files in os.walk(file):
    print(root)
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述
可见,root在循环中不断从根目录进入子目录。

然后我们打印dirs信息:

file = r'D:\dataset\makelabels\demo'
for root, dirs, files in os.walk(file):
    for dir in dirs:
        path = os.path.join(root,dir)
        print(dir)
        print(path)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述
dirs表示当前root目录中子目录的名称。

输出所有的文件地址:

import os
file = r'D:\dataset\makelabels\demo'
for root, dirs, files in os.walk(file):
    for file in files:
        path = os.path.join(root, file)
        print(file)
        print(path)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

files表示当前root目录下的所有文件名称的数组


旧版讲解

用os库比较简单

1.最常见的需求,遍历获取文件夹下包括所有子文件夹下的所有文件的路径。
利用os.walk(path)函数:

import os

root_path = r'/Users/TNC/Desktop/bg_'
for i in os.walk(root_path):
	print(i)
  • 1
  • 2
  • 3
  • 4
  • 5

(注:字符串前加r,防止被转义,例如出现’\t’···)
在这里插入图片描述
在这里插入图片描述

很容易看出:
1.会打印一至多个tuple,第一个tuple是描述主文件夹,后面的都是描述主文件夹下子文件夹. (注:在子目录下创建一个新文件夹,二级目录依旧可以被打印出来;因此,得知os.walk(root_path)可以获取描述主目录的tuple,以及子文件夹和子文件夹下所有更高级的子文件夹,顺序是:遍历一级目录下的第一个子文件夹,然后一次迭代遍历该子文件下所有的更高级子文件夹,全部结束后遍历一级目录下的第二个子文件夹······,深度优先?)

2.关于每一个tuple都描述着一个文件夹的信息,每个tuple都有3个元素:

for i in os.walk(path):
    print(type(i[0]))
    print(type(i[1]))
    print(type(i[2]))
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述
第一个元素(str类型)存放着该文件夹的绝对路径;
第二个元素(list类型)存放着所有子文件夹的名称;
第三个元素(list类型)存放着所有当前目录下文件的名称;

显然:第一个元素的路径和第三个元素list中的一个文件名相加,就是一个文件的绝对路径。

常见情景:循环获取当前主文件下的所有文件的绝对路径:

import os

#主文件夹路径
root_path = path=r'/Users/TNC/Desktop/bg_'

for i in os.walk(root_path):
    for j in i[2]:
    	#i[0]是当前文件夹的绝对路径,j是文件名
    	path = os.path.join(i[0],j)
        
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

注:os.path.join将其中的字符串中间添加’/‘连接起来
例如:os.path.join(str1,str2,str3)
类似于 str1 + ‘/’ +str2 +’/’ +str3
注意不要自行在其中元素末尾添加’/‘,若是其中元素末尾添加’/',则不会再与后面的元素连接
在这里插入图片描述

另外:
使用os.listdir(path)函数能得到文件夹下所有文件(包括文件夹)的名称:

for i in os.listdir(root_path):
     print(i)
  • 1
  • 2

只是名称····
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/319443
推荐阅读
相关标签
  

闽ICP备14008679号