话不多说,上代码:

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

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)

只是名称····


(本文内容根据网络资料整理和来自用户投稿,出于传递更多信息之目的,不代表本站其观点和立场。也不对其真实性、可靠性承担任何法律责任,特此声明!)

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部