python中遍历文件的3个方法


Posted in Python onSeptember 02, 2014

今天写一个在windows下批量修改文件名的python脚本,用到文件的遍历。用python进行文件遍历有多种方法,这里列举并说明一下。

os.path.walk()

这是一个传统的用法。

walk(root,callable,args)方法有三个参数:要遍历的目录,回调函数,回调函数的参数(元组形式)。

调用的过程是遍历目录下的文件或目录,每遍历一个目录,调用回调函数,并把args作为参数传递给回调函数。

回调函数定义时也有三个参数,比如示例中的func中的三个参数,分别为walk传来的参数、目录的路径、目录下的文件列表(只有文件名,不是完整路径)。请看示例:

import os

s = os.sep #根据unix或win,s为\或/

root = "d:" + s + "ll" + s #要遍历的目录
def func(args,dire,fis): #回调函数的定义

    for f in fis:

        fname = os.path.splitext(f)  #分割文件名为名字和扩展名的二元组

        new = fname[0] + 'b' + fname[1]  #改名字

        os.rename(os.path.join(dire,f),os.path.join(dire,new)) #重命名
os.path.walk(root,func,()) #遍历

这种方法在使用时有个问题,不能递归遍历下一层(这点我还不确定,欢迎指正)。

python的高级版本中加入了os.walk(),比这个好用。

os.walk()

原型为:os.walk(top, topdown=True, onerror=None, followlinks=False)

我们一般只使用第一个参数。(topdown指明遍历的顺序)
该方法对于每个目录返回一个三元组,(dirpath, dirnames, filenames)。第一个是路径,第二个是路径下面的目录,第三个是路径下面的非目录(对于windows来说也就是文件)。请看示例:

import os

s = os.sep

root = "d:" + s + "ll" + s 
for rt, dirs, files in os.walk(root):

    for f in files:

        fname = os.path.splitext(f)

        new = fname[0] + 'b' + fname[1]

        os.rename(os.path.join(rt,f),os.path.join(rt,new))

这种方式可以递归遍历所有的文件。

listdir

可以使用os模块下的几个方法组合起来进行遍历。请看示例:

import os

s = os.sep

root = "d:" + s + "ll" + s
for i in os.listdir(root):

    if os.path.isfile(os.path.join(root,i)):

        print i

这里需要注意的是,其中的i是目录或文件名,不是完整的路径,在使用时要结合os.path.join()方法还原完整路径。

遍历搞定之后,文件名的修改可以使用正则表达式做一些高级的处理。

另外,还可以使用os.system(cmd)来调用shell里面的相关命令对文件进行处理,很好很强大。

Python 相关文章推荐
不可错过的十本Python好书
Jul 06 Python
Python实现按学生年龄排序的实际问题详解
Aug 29 Python
使用python3+xlrd解析Excel的实例
May 04 Python
python实现人人自动回复、抢沙发功能
Jun 08 Python
Python基础教程之if判断,while循环,循环嵌套
Apr 25 Python
利用python计算windows全盘文件md5值的脚本
Jul 27 Python
Django 响应数据response的返回源码详解
Aug 06 Python
Python实现栈的方法详解【基于数组和单链表两种方法】
Feb 22 Python
Django model重写save方法及update踩坑详解
Jul 27 Python
Windows下pycharm安装第三方库失败(通用解决方案)
Sep 17 Python
Python实现LR1文法的完整实例代码
Oct 25 Python
python爬取股票最新数据并用excel绘制树状图的示例
Mar 01 Python
python中的五种异常处理机制介绍
Sep 02 #Python
python之yield表达式学习
Sep 02 #Python
python中的hashlib和base64加密模块使用实例
Sep 02 #Python
python多线程编程中的join函数使用心得
Sep 02 #Python
python中的函数用法入门教程
Sep 02 #Python
python爬虫入门教程之点点美女图片爬虫代码分享
Sep 02 #Python
python爬虫入门教程之糗百图片爬虫代码分享
Sep 02 #Python
You might like
Terran建筑一览
2020/03/14 星际争霸
PHP之uniqid()函数用法
2014/11/03 PHP
详解PHP中cookie和session的区别及cookie和session用法小结
2016/06/12 PHP
yii2利用自带UploadedFile实现上传图片的示例
2017/02/16 PHP
jquery 表格的增行删行实现思路
2013/03/21 Javascript
jQuery绑定事件-多种实现方式总结
2016/05/09 Javascript
bootstrap-wysiwyg结合ajax实现图片上传实时刷新功能
2016/05/27 Javascript
Javascript闭包与函数柯里化浅析
2016/06/22 Javascript
js操作DOM--添加、删除节点的简单实例
2016/07/08 Javascript
解决ajax不能访问本地文件问题(利用js跨域原理)
2017/01/24 Javascript
日期时间范围选择插件:daterangepicker使用总结(必看篇)
2017/09/14 Javascript
JavaScript复制内容到剪贴板的两种常用方法
2018/02/27 Javascript
微信开发之微信jssdk录音功能开发示例
2018/10/22 Javascript
浅谈Vue数据响应
2018/11/05 Javascript
Layui数据表格跳转到指定页的实现方法
2019/09/05 Javascript
Websocket 向指定用户发消息的方法
2020/01/09 Javascript
JS几个常用的函数和对象定义与用法示例
2020/01/15 Javascript
解决VUE 在IE下出现ReferenceError: Promise未定义的问题
2020/11/07 Javascript
简化Python的Django框架代码的一些示例
2015/04/20 Python
Python实现队列的方法
2015/05/26 Python
Python读取sqlite数据库文件的方法分析
2017/08/07 Python
python自动裁剪图像代码分享
2017/11/25 Python
python调用Delphi写的Dll代码示例
2017/12/05 Python
解决pyshp UnicodeDecodeError的问题
2019/12/06 Python
Python调用系统命令os.system()和os.popen()的实现
2020/12/31 Python
荷兰在线体育用品商店:Avantisport.nl
2018/07/04 全球购物
哈萨克斯坦最大的时装、鞋子和配饰在线商店:Lamoda.kz
2019/11/19 全球购物
国贸专业个人求职信分享
2013/12/04 职场文书
产品质量承诺范本
2014/03/31 职场文书
建筑工程质量通病防治方案
2014/06/08 职场文书
环境工程专业自荐信范文
2014/06/24 职场文书
大学专科求职信
2014/07/02 职场文书
十佳家长事迹材料
2014/08/26 职场文书
小学生自我评价100字(15篇)
2014/09/18 职场文书
教师听课评语大全
2014/12/31 职场文书
Mysql数据库索引面试题(程序员基础技能)
2021/05/31 MySQL