Python智阐10-文件目录遍历,四种方法

我们对文件操作时,往往要遍历整个文件目录。前面已经介绍了文件和目录的操作方法,也介绍了递归函数。现在介绍一下四种目录遍历的方法(思维)。

1、方法一(普通递归)

方法(思维):根据文件目录获取该目录下的所有文件,然后对这些文件进行判断,如果是文件夹,则调用函数本身,如果是普通文件,则打印出文件名。

代码如下:

#递归方法

import os

def getPath(path):

getDetailPath = os.listdir(path)

for detailPath in getDetailPath:

newDetailPath = os.path.join(path,detailPath)

if os.path.isdir(newDetailPath):

print("文件夹:%s" %(detailPath))

getPath(newDetailPath)

else:

print("文件:%s"%(detailPath))

getPath(r"D:\Code\log")

2、方法二(模拟栈)

栈特点:先进后出,模拟栈方法遍历目录,深度遍历。

方法(思维):先创建一个空的列表,把文件目录当做一个元素添加进列表,从列表末尾取出一个元素(文件目录),获取该目录下的所有文件,然后对这些文件进行判断,如果是文件夹,则调用函数本身(添加进列表),如果是普通文件,则打印出文件名,如此循环处理这个列表。

代码如下:

#模拟栈方法

import os

def getPath(path):

pathList = []

pathList.append(path)

while len(pathList) != 0:

newPath = pathList.pop()

getDetailPath = os.listdir(newPath)

for detailPath in getDetailPath:

newDetailPath = os.path.join(newPath,detailPath)

if os.path.isdir(newDetailPath):

print("文件夹:%s" % (detailPath))

getPath(newDetailPath)

else:

print("文件:%s" % (detailPath))

getPath(r"D:\Code\log")

3、方法三(模拟队列)

队列特点:先进先出,模拟队列方法遍历目录,广度遍历。

方法(思维):先生成一个队列,把文件目录当做一个元素添加进队列,从队列中取出一个元素(文件目录),获取该目录下的所有文件,然后对这些文件进行判断,如果是文件夹,则调用函数本身(添加进队列),如果是普通文件,则打印出文件名,如此循环处理这个队列。

代码如下:

#模拟队列

import os

import collections

def getPath(path):

pathQueue = collections.deque()

pathQueue.append(path)

while len(pathQueue) != 0:

newPath = pathQueue.popleft()

getDetailPath = os.listdir(newPath)

for detailPath in getDetailPath:

newDetailPath = os.path.join(newPath,detailPath)

if os.path.isdir(newDetailPath):

print("文件夹:%s" % (detailPath))

getPath(newDetailPath)

else:

print("文件:%s" % (detailPath))

getPath(r"D:\Code\log")

4、方法四(os.walk(path))

walk()方法主要参数有path,其他参数请参考官方文档

path:所要遍历的目录,它返回的是一个元组(root,dirs,files)

其中:

root 是指当前正在遍历的这个文件夹的本身的路径

dirs 是一个 list ,列表中的元素是该文件夹中所有的目录的名字(不包括子目录)

files 是一个 list , 列表中的元素是该文件夹中所有的文件(不包括子目录)

代码如下:

#os.walk() 方法

import os

def getPath(path):

for root,dirs,files in os.walk(path):

for file in files:

print("文件:"+file)

for dir in dirs:

print("文件夹:"+dir)

getPath(dir)

getPath(r"D:\Code\log")

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181014A10VTG00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券