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实现监控windows服务并自动启动服务示例
Apr 17 Python
python实现指定字符串补全空格的方法
Apr 30 Python
利用Python实现网络测试的脚本分享
May 26 Python
解决Scrapy安装错误:Microsoft Visual C++ 14.0 is required...
Oct 01 Python
Django中ORM表的创建和增删改查方法示例
Nov 15 Python
对numpy.append()里的axis的用法详解
Jun 28 Python
Python WSGI的深入理解
Aug 01 Python
ubuntu 18.04搭建python环境(pycharm+anaconda)
Jun 14 Python
python使用装饰器作日志处理的方法
Jul 11 Python
python获取引用对象的个数方式
Dec 20 Python
基于python实现地址和经纬度转换
May 19 Python
Python批量解压&压缩文件夹的示例代码
Apr 04 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中的cookie
2006/11/26 PHP
三种php连接access数据库方法
2013/11/11 PHP
PHP加密解密实例分析
2015/12/25 PHP
PHP使用Redis实现防止大并发下二次写入的方法
2017/10/09 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
发一个自己用JS写的实用看图工具实现代码
2008/07/26 Javascript
不用写JS也能使用EXTJS视频演示
2008/12/29 Javascript
javascript实现日期格式转换
2014/12/16 Javascript
浅析angularJS中的ui-router和ng-grid模块
2016/05/20 Javascript
nodejs连接mysql数据库简单封装示例-mysql模块
2017/04/10 NodeJs
jQuery Datatable 多个查询条件自定义提交事件(推荐)
2017/08/24 jQuery
Cpage.js给组件绑定事件的实现代码
2017/08/31 Javascript
vue组件父与子通信详解(一)
2017/11/07 Javascript
VUE实现可随意拖动的弹窗组件
2018/09/25 Javascript
spring+angular实现导出excel的实现代码
2019/02/27 Javascript
学习LayUI时自研的表单参数校验框架案例分析
2019/07/29 Javascript
删除目录下相同文件的python代码(逐级优化)
2012/05/25 Python
深入解析Python中函数的参数与作用域
2016/03/20 Python
pandas分别写入excel的不同sheet方法
2018/12/11 Python
Python使用POP3和SMTP协议收发邮件的示例代码
2019/04/16 Python
python挖矿算力测试程序详解
2019/07/03 Python
Python 3.8 新功能全解
2019/07/25 Python
Python telnet登陆功能实现代码
2020/04/16 Python
Python读取图像并显示灰度图的实现
2020/12/01 Python
CSS3等相关属性制作分页导航实现代码
2012/12/24 HTML / CSS
html5组织文档结构_动力节点Java学院整理
2017/07/11 HTML / CSS
检测浏览器是否支持html5视频的代码
2013/03/28 HTML / CSS
100%羊绒:NakedCashmere
2020/08/26 全球购物
食品厂厂长岗位职责
2014/01/30 职场文书
遥感技术与仪器求职信
2014/02/22 职场文书
乡镇干部个人对照检查材料(群众路线)
2014/09/26 职场文书
高中生打架检讨书1000字
2015/02/17 职场文书
生日宴会祝酒词
2015/08/10 职场文书
销售口号霸气押韵
2015/12/24 职场文书
为Java项目添加Redis缓存的方法
2021/05/18 Redis
tomcat默认最大连接数及相关调整方法
2022/05/06 Servers