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中精确输出JSON浮点数的方法
Apr 18 Python
深入Python解释器理解Python中的字节码
Apr 01 Python
python编码总结(编码类型、格式、转码)
Jul 01 Python
简单了解Python中的几种函数
Nov 03 Python
Django框架模板语言实例小结【变量,标签,过滤器,继承,html转义】
May 23 Python
Python完成毫秒级抢淘宝大单功能
Jun 06 Python
简单了解Django应用app及分布式路由
Jul 24 Python
python web框架中实现原生分页
Sep 08 Python
Django的CVB实例详解
Feb 10 Python
PyQt5实现登录页面
May 30 Python
Python3爬虫带上cookie的实例代码
Jul 28 Python
深度学习小工程练习之垃圾分类详解
Apr 14 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
PHP学习 变量使用总结
2011/03/24 PHP
PHP的5个安全措施小结
2012/07/17 PHP
解析php框架codeigniter中如何使用框架的session
2013/06/24 PHP
php include类文件超时问题处理
2015/02/06 PHP
php微信公众号开发之图片回复
2018/10/20 PHP
PHP队列场景以及实现代码实例详解
2021/02/26 PHP
Javascript 刷新全集常用代码
2009/11/22 Javascript
我遇到的参数传递中 双引号单引号嵌套问题
2010/02/11 Javascript
jQuery EasyUI 中文API Button使用实例
2010/04/14 Javascript
jQuery Autocomplete自动完成插件
2010/07/17 Javascript
jquery+ajax每秒向后台发送请求数据然后返回页面的代码
2011/01/17 Javascript
JQuery优缺点分析说明
2011/04/10 Javascript
js对象关系图 方便dom操作
2012/03/18 Javascript
解析javascript系统错误:-1072896658的解决办法
2013/07/08 Javascript
JS实现div居中示例
2014/04/17 Javascript
javascript中定义类的方法详解
2015/02/10 Javascript
JavaScript中的parse()方法使用简介
2015/06/12 Javascript
js实现仿爱微网两级导航菜单效果代码
2015/08/31 Javascript
JS获取数组最大值、最小值及长度的方法
2015/11/24 Javascript
js判断radiobuttonlist的选中值显示/隐藏其它模块的实现方法
2016/08/25 Javascript
浅述Javascript的外部对象
2016/12/07 Javascript
基于jQuery代码实现圆形菜单展开收缩效果
2017/02/13 Javascript
Node.js实现文件上传的示例
2017/06/28 Javascript
JS实现百度搜索框关键字推荐
2020/02/17 Javascript
python实现简单爬虫功能的示例
2016/10/24 Python
python 环境变量和import模块导入方法(详解)
2017/07/11 Python
python+selenium自动化实战携带cookies模拟登陆微博
2021/01/19 Python
惠普墨西哥官方商店:HP墨西哥
2016/12/01 全球购物
巴西网上药店:Drogaria Araujo
2021/01/06 全球购物
大学毕业生文采飞扬的自我鉴定
2013/12/03 职场文书
酒店管理毕业生自我鉴定
2014/03/02 职场文书
2014年技术工作总结范文
2014/11/20 职场文书
召开会议通知范文
2015/04/15 职场文书
毕业生登记表班级意见
2015/06/05 职场文书
2015年高校保卫处工作总结
2015/07/23 职场文书
简短的人生哲理(38句)
2019/08/13 职场文书