Python使用os.listdir()和os.walk()获取文件路径与文件下所有目录的方法


Posted in Python onApril 01, 2019

在python3.6版本中去掉了os.path.walk()函数

os.walk()

函数声明:walk(top,topdown=True,oneerror=None)

  • 1、参数top表示需要遍历的目录树的路径
  • 2、参数农户topdown默认是"True",表示首先返回根目录树下的文件,然后,再遍历目录树的子目录。topdown的值为"False",则表示先遍历目录树的子目录,返回子目录下的文件,最后返回根目录下的文件
  • 3、参数oneerror的默认值是"None",表示忽略文件遍历时产生的错误,如果不为空,则提供一个自定义函数提示错误信息,后边遍历抛出异常
  • 4、函数返回一个元组,该元组有3个元素,这3个元素分别表示'每次遍历的路径名,目录列表和文件列表'

os.walk()实例:

import os
def walk(path):
  if not os.path.exists(path):
    return -1
  for root,dirs,names in os.walk(path):
    for filename in names:
      print(os.path.join(root,filename)) #路径和文件名连接构成完整路径
if __name__=='__main__':
  path = "C:\\Users\\Administrator\\Desktop\\2017-9-1"
  walk(path)

输出结果:

C:\Users\Administrator\Desktop\2017-9-1\2017-9-1.txt
C:\Users\Administrator\Desktop\2017-9-1\2017-9-1storage.txt
C:\Users\Administrator\Desktop\2017-9-1\apk.conf
C:\Users\Administrator\Desktop\2017-9-1\数据采集导入质量统计_2017-09-01.docx
C:\Users\Administrator\Desktop\2017-9-1\test1\2017-9-1.txt
C:\Users\Administrator\Desktop\2017-9-1\test2\2017-9-1.txt

1.os.listdir(path='')

其中参数path为需要列出的目录路径。该函数返回指定的文件夹包含的文件或文件夹的名字的列表。

2.walk(top, topdown=True, onerror=None, followlinks=False)

os.walk(path)返回三个值:parent, dirnames, filenames,分别表示path的路径、path路径下的文件夹的名字和path路径下文件夹以外的其他文件。

应用1:在一个目录下面只有文件时可以使用os.listdir()。

比如文件test_file文件中包含三个文件,即:

test_file:
         test1.txt
         test2.txt
         test3.txt

可以使用如下代码获取每个文件的绝对路径:

>>> import os
>>> path = r'C:\Users\XXN\Desktop\test_file'
>>> for each_file in os.listdir(path):
 print(os.path.join(path,each_file))

结果如下:

C:\Users\XXN\Desktop\test_file\test1.txt
C:\Users\XXN\Desktop\test_file\test2.txt
C:\Users\XXN\Desktop\test_file\test3.txt

应用2:当一个目录下面既有文件又有目录(文件夹),可使用os.walk()读取里面所有文件。

比如文件test_file中既包含文件也包含文件夹:

Test_file:
        file1:
             test1.txt
             test2.txt
             test3.txt
        file2:
             test1.txt
             test2.txt
             test3.txt
        test1.txt
        test2.txt
        test3.txt

使用os.walk()可获得:

>>> import os
>>> path = r'C:\Users\XXN\Desktop\test_file'
>>> for parent,dirnames,filenames in os.walk(path):
 print(parent,dirnames,filenames)

结果如下:

C:\Users\XXN\Desktop\test_file ['file1', 'file2'] ['test1.txt', 'test2.txt', 'test3.txt']
C:\Users\XXN\Desktop\test_file\file1 [] ['test1.txt', 'test2.txt', 'test3.txt']
C:\Users\XXN\Desktop\test_file\file2 [] ['test1.txt', 'test2.txt', 'test3.txt']

  • parent:列出了目录路径下面所有存在的目录的名称
  • dirnames:文件夹名
  • filenames:列出了目录路径下面所有文件的名称

通过下面代码可获得给定路径下所有的文件路径:

>>> import os
>>> path = r'C:\Users\XXN\Desktop\test_file'
>>> for parent,dirnames,filenames in os.walk(path):
 for filename in filenames:
 print(os.path.join(parent,filename))

结果如下:

C:\Users\XXN\Desktop\test_file\test1.txt
C:\Users\XXN\Desktop\test_file\test2.txt
C:\Users\XXN\Desktop\test_file\test3.txt
C:\Users\XXN\Desktop\test_file\file1\test1.txt
C:\Users\XXN\Desktop\test_file\file1\test2.txt
C:\Users\XXN\Desktop\test_file\file1\test3.txt
C:\Users\XXN\Desktop\test_file\file2\test1.txt
C:\Users\XXN\Desktop\test_file\file2\test2.txt
C:\Users\XXN\Desktop\test_file\file2\test3.txt

应用3:编写一个程序,用户输入关键字,查找当前文件夹内(如果当前文件夹内包含文件夹,则进入文件夹继续搜索)所有含有该关键字的文本文件(.txt后缀),要求显示该文件所在的位置以及关键字在文件中的具体位置(第几行第几个字符)

思路:

1.先把当前文件夹下的.txt文件以及当前文件包含的子文件夹中的.txt文件的路径全部保存至一个txt_list列表中;

2.以读取的方式打开txt_list中每个路径的文件,并将每个文件中出现关键字的行数以及关键字索引保存至一个字典dict_keywords中。

3.按格式输出。

代码演示:

import os
def print_keywords(dict_keywords):
  keys = dict_keywords.keys()
  keys = sorted(keys)
  for each in keys:
    print('关键字出现在第 %s 行,第 %s 个位置。'% (each, str(dict_keywords[each])))
def line_keywords(line, keywords):
  key_index = []
  start = line.find(keywords)
  while start!=-1:
    key_index.append(start+1)
    start = line.find(keywords, start+1)
  return key_index    
def file_keywords(filename, keywords):
  f = open(filename,'r')
  line = 0
  dict_keywords = dict()
  for each_line in f:
    line +=1
    if keywords in each_line:
        key_index = line_keywords(each_line, keywords)
        dict_keywords[line]= key_index
  f.close()
  return dict_keywords
def file_search(keywords, flag):
  all_files = os.walk(os.getcwd())
  txt_list = []
  for each in all_files:
    for filename in each[2]:
      if os.path.splitext(filename)[1] == '.txt':
        txt_list.append(os.path.join(each[0],filename))
  for each_txt_file in txt_list:
    dict_keywors = file_keywords(each_txt_file, keywords)
    print('====================================================')
    print('在文件【%s】中找到关键字【%s】' % (each_txt_file, keywords))
    if flag in ['YES', 'Yes', 'yes']:
       print_keywords(dict_keywors)
keywords = input("请将该脚本放于待查找的文件夹中,请输入关键字:")
flag = input("请问是否需要打印关键字【%s】在文件中的具体位置(YES/NO):")
file_search(keywords, flag)

运行结果如下:

Python使用os.listdir()和os.walk()获取文件路径与文件下所有目录的方法

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Python 相关文章推荐
python实现字典(dict)和字符串(string)的相互转换方法
Mar 01 Python
python+selenium识别验证码并登录的示例代码
Dec 21 Python
Python中列表与元组的乘法操作示例
Feb 10 Python
批量将ppt转换为pdf的Python代码 只要27行!
Feb 26 Python
Tensorflow使用tfrecord输入数据格式
Jun 19 Python
解决Python print输出不换行没空格的问题
Nov 14 Python
Python面向对象基础入门之编码细节与注意事项
Dec 11 Python
python将list转为matrix的方法
Dec 12 Python
python爬取盘搜的有效链接实现代码
Jul 20 Python
关于pytorch中网络loss传播和参数更新的理解
Aug 20 Python
Python中xml和dict格式转换的示例代码
Nov 07 Python
python3 dict ndarray 存成json,并保留原数据精度的实例
Dec 06 Python
python装饰器简介---这一篇也许就够了(推荐)
Apr 01 #Python
Python批量删除只保留最近几天table的代码实例
Apr 01 #Python
Python中的Socket 与 ScoketServer 通信及遇到问题解决方法
Apr 01 #Python
python assert的用处示例详解
Apr 01 #Python
使用Python操作FTP实现上传和下载的方法
Apr 01 #Python
Python提取特定时间段内数据的方法实例
Apr 01 #Python
如何使用Python进行OCR识别图片中的文字
Apr 01 #Python
You might like
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
2017/11/20 PHP
使用javascript访问XML数据的实例
2006/12/27 Javascript
给Javascript数组插入一条记录的代码
2007/08/30 Javascript
jquery imgareaselect 使用利用js与程序结合实现图片剪切
2009/07/30 Javascript
javascript与webservice的通信实现代码
2010/12/25 Javascript
解决js数据包含加号+通过ajax传到后台时出现连接错误
2013/08/01 Javascript
jQuery 事件的命名空间简单了解
2013/11/22 Javascript
分享JavaScript获取网页关闭与取消关闭的事件
2013/12/13 Javascript
JS常用函数使用指南
2014/11/23 Javascript
jquery实现标题字体变换的滑动门菜单效果
2015/09/07 Javascript
基于jquery实现可定制的web在线富文本编辑器附源码下载
2015/11/17 Javascript
JavaScript组成、引入、输出、运算符基础知识讲解
2016/12/08 Javascript
vue2.0父子组件及非父子组件之间的通信方法
2017/01/21 Javascript
jQuery插件select2利用ajax高效查询大数据列表(可搜索、可分页)
2017/05/19 jQuery
Vue2.x中利用@font-size引入字体图标报错的解决方法
2018/09/28 Javascript
vue路由守卫,限制前端页面访问权限的例子
2019/11/11 Javascript
JS创建自定义对象的六种方法总结
2020/12/15 Javascript
vue使用echarts画组织结构图
2021/02/06 Vue.js
[41:41]TFT vs Secret Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
[40:03]RNG vs VG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python守护进程用法实例分析
2015/06/04 Python
python开发之基于thread线程搜索本地文件的方法
2015/11/11 Python
Django使用httpresponse返回用户头像实例代码
2018/01/26 Python
python中sys.argv函数精简概括
2018/07/08 Python
Python获取一个用户名的组ID过程解析
2019/09/03 Python
Python+OpenCV图像处理——实现轮廓发现
2020/10/23 Python
艺术系应届生的自我评价
2013/10/19 职场文书
医学院学生求职简历的自我评价
2013/10/24 职场文书
法学毕业生自我鉴定
2013/11/08 职场文书
党员政治学习材料
2014/05/14 职场文书
2015年医德考评自我评价
2015/03/03 职场文书
2015年幼儿园中班开学寄语
2015/05/27 职场文书
健康证明
2015/06/19 职场文书
班主任培训研修日志
2015/11/13 职场文书
2019假期福利管理制度!
2019/07/15 职场文书
基于CSS制作创意端午节专属加载特效
2022/06/01 HTML / CSS