【python基础】OS之文件夹遍历

os是python用于系统操作的一个包。
通过调用os对文件夹遍历主要有两种方法:os.listdiros.walk。下面分别演示两个函数的用法。

文件夹目录组织形式为:
这里写图片描述


使用os.list遍历

import os

directory = os.listdir('.')
print('------------------------------')
print('遍历文件夹,输出相对路径:')
for dir in directory:
    print(dir)
print('------------------------------')
print('遍历文件夹,输出完整路径:')
for dir in directory:
    print(os.path.join(os.getcwd(), dir))
print('------------------------------')

输出:

------------------------------
遍历文件夹,输出相对路径:
.idea
1
2
3
4.docx
5.docx
os_operation.py
------------------------------
遍历文件夹,输出完整路径:
H:\python_coding\.idea
H:\python_coding\1
H:\python_coding\2
H:\python_coding\3
H:\python_coding\4.docx
H:\python_coding\5.docx
H:\python_coding\os_operation.py
------------------------------
  1. os.getcwd:获取当前目录

上述操作其实只是遍历了文件夹的第一层,如果想要遍历该文件夹的第二层,需要使用os.path.isdir函数来判断第一层中的元素是文件还是文件夹,如果该元素是文件夹,则再次调用os.listdir对该元素进行遍历。代码如下:

import os

cwd = os.getcwd()
directory = os.listdir(cwd)
print('------------------------------')
print('遍历文件夹,输出完整路径:')
for dir in directory:
    path = os.path.join(cwd, dir)
    print(path)
    if os.path.isdir(path):
        #遍历子文件夹
        for subdir in os.listdir(path):
            subpath = os.path.join(path, subdir)
            print(subpath)
print('------------------------------')

输出:

------------------------------
遍历文件夹,输出完整路径:
H:\python_coding\1
H:\python_coding\1\1_1
H:\python_coding\1\1_2
H:\python_coding\1\1_3.docx
H:\python_coding\2
H:\python_coding\3
H:\python_coding\4.docx
H:\python_coding\5.docx
H:\python_coding\os_operation.py
------------------------------

如果还想遍历文件夹的再下一层,可以再添加一个for循环。当然,这样就显得很繁琐了,最好的方法就是写一个递归函数。

使用os.walk遍历

import os

cwd = os.getcwd()
directiory = os.walk(cwd)
for root, dirs, files in directiory:
    for d in dirs:
        print(os.path.join(root, d))
    for file in files:
        print(os.path.join(root, file))

输出:

H:\python_coding\1
H:\python_coding\2
H:\python_coding\3
H:\python_coding\4.docx
H:\python_coding\5.docx
H:\python_coding\os_operation.py
H:\python_coding\1\1_1
H:\python_coding\1\1_2
H:\python_coding\1\1_3.docx
H:\python_coding\1\1_1\1_1_1
H:\python_coding\1\1_1\1_1_2.docx
  1. os.walk返回的是一个三元组,遍历遵循的是广度优先搜索
  2. 如果只使用第一个for循环,则可以遍历该文件夹下所有的子文件夹;同理,如果只使用第二个for循环,则可以遍历该文件夹下所有的子文件

总结:

  1. os.list可用于已知文件夹组织形式的情况下,对包含特定字符的文件或者文件夹进行检索,可选择遍历多少层;
  2. os.walk可用于不知道文件夹组织形式的情况下,只能遍历所有的子文件或者子文件夹。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值