赞
踩
话不多说,上代码:
遍历文件内的所有文件(包括子目录内的文件)
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)
只遍历根目录下的文件(不包括子目录内的文件)
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)
以前写的旧版讲解太繁琐了,重写一版本。
演示的文件结构:
--demo(dir)
--test1(dir)
--a(dir)
--aa(dir)
--b(dir)
--c(dir)
--test2(dir)
--2.txt
--1.txt
首先我们打印root信息:
import os
file = r'D:\dataset\makelabels\demo'
for root, dirs, files in os.walk(file):
print(root)
可见,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)
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)
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)
(注:字符串前加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]))
第一个元素(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)
注:os.path.join将其中的字符串中间添加’/‘连接起来
例如:os.path.join(str1,str2,str3)
类似于 str1 + ‘/’ +str2 +’/’ +str3
注意不要自行在其中元素末尾添加’/‘,若是其中元素末尾添加’/',则不会再与后面的元素连接
另外:
使用os.listdir(path)函数能得到文件夹下所有文件(包括文件夹)的名称:
for i in os.listdir(root_path):
print(i)
只是名称····
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。