利用python遍历磁盘的方法有哪些呢?

举报
泽宇-Li 发表于 2021/04/12 23:45:28 2021/04/12
【摘要】 递归import osdef get_files(path):  # 判断路径是否存在,如果不存在,函数直接结束  if not os.path.exists(path):    print('路径不存在')    return  # 判断路径是否为文件夹  if not os.path.isdir(path):    print('路径是一个文件')    return  # 这时候,路径...

递归

import osdef get_files(path):  # 判断路径是否存在,如果不存在,函数直接结束  if not os.path.exists(path):    print('路径不存在')    return  # 判断路径是否为文件夹  if not os.path.isdir(path):    print('路径是一个文件')    return  # 这时候,路径是一个文件夹  # 获取文件夹中文件或文件夹的名称  file_list = os.listdir(path)  # 遍历文件夹  for filename in file_list:    # 拼接路径,获取每个次级目录下的文件路径    subpath = os.path.join(path,filename)    if os.path.isfile(subpath):      if os.path.splitext(subpath)[1] == '.py':        print('python文件:{}'.format(subpath))    else:      # 如果filename是文件夹,则调用函数继续遍历      get_files(subpath) 

用栈来遍历磁盘


栈的特点:先进后厨,后进先出

原理:path第一次被pop删除后返回path,遍历目录下的文件,如果遇到文件夹追加到列表中,pop是删除最后一位的元素,每次又遍历最后一位的文件夹,所以每一轮都会将次级目录下的文件夹遍历完成之后再遍历下个次级目录

 import osdef get_files(path):  # 判断路径是否存在  if not os.path.exists(path):    print('路径不存在')    return  if not os.path.isdir(path):    print('路径是一个文件夹')    return  # 创建一个列表作为栈  stack = [path]  # 取出栈中的元素  while len(stack) != 0:    path = stack.pop()    file_list = os.listdir(path)    for filename in file_list:      subpath = os.path.join(path,filename)      if os.path.isfile(subpath):        print('python文件:{}'.format(subpath))      else:        stack.append(subpath) 

广度遍历磁盘


用队列遍历磁盘

 import osimport collectionsdef get_py_file(path):  # 判断路径是否存在  if not os.path.exists(path):    print('路径不存在')    return    # 判断路径是否是文件夹  if os.path.isfile(path):    print('路径是文件')    return    # path是一个文件夹  # 定义一个空对列  queue = collections.deque()  queue.append(path)  while len(queue) != 0:    # 从队列中获取第一个元素    path = queue.popleft()    # 获取目录下的所有内容    filelist = os.listdir(path)    # 遍历    for filename in filelist:      # 拼接      filepath = os.path.join(path, filename)      if os.path.isfile(filepath):        if os.path.splitext(filepath)[1] == '.py':          print(filepath)      else:        queue.append(filepath) 

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。