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正则表达式的使用范例详解
Aug 08 Python
通过实例浅析Python对比C语言的编程思想差异
Aug 30 Python
基于Python 装饰器装饰类中的方法实例
Apr 21 Python
python+flask实现API的方法
Nov 21 Python
利用Django提供的ModelForm增删改数据的方法
Jan 06 Python
python使用 zip 同时迭代多个序列示例
Jul 06 Python
Atom Python 配置Python3 解释器的方法
Aug 28 Python
使用python实现男神女神颜值打分系统(推荐)
Oct 31 Python
如何基于Python实现电子邮件的发送
Dec 16 Python
python连接打印机实现打印文档、图片、pdf文件等功能
Feb 07 Python
python代码能做成软件吗
Jul 24 Python
Python绘制散乱的点构成的图的方法
Apr 21 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来自动调用不同服务器上的flash
2006/10/09 PHP
phpmyadmin MySQL 加密配置方法
2009/07/05 PHP
apache+php完美解决301重定向的两种方法
2011/06/08 PHP
解析mysql 表中的碎片产生原因以及清理
2013/06/22 PHP
php使用Image Magick将PDF文件转换为JPG文件的方法
2015/04/01 PHP
PHP的Yii框架中YiiBase入口类的扩展写法示例
2016/03/17 PHP
ModelDialog JavaScript模态对话框类代码
2011/04/17 Javascript
自定义一个jquery插件[鼠标悬浮时候 出现说明label]
2011/06/27 Javascript
仿新浪微博登陆邮箱提示效果的js代码
2013/08/02 Javascript
javascript 获取元素样式必杀技
2014/05/04 Javascript
基于JavaScript FileReader上传图片显示本地链接
2016/05/27 Javascript
文本框只能输入数字的js代码(含小数点)
2016/07/10 Javascript
jQuery fadeOut 异步实例代码详解
2016/08/18 Javascript
Bootstarp基本模版学习教程
2017/02/01 Javascript
新手vue构建单页面应用实例代码
2017/09/18 Javascript
javascript流程控制语句集合
2017/09/18 Javascript
JavaScript实现数值自动增加动画
2017/12/28 Javascript
详解Vue用cmd创建项目
2019/02/12 Javascript
Node爬取大批量文件的方法示例
2019/06/28 Javascript
js实现跟随鼠标移动的小球
2019/08/26 Javascript
node读写Excel操作实例分析
2019/11/06 Javascript
Python 3.x基于Xml数据的Http请求方法
2018/12/28 Python
改变 Python 中线程执行顺序的方法
2020/09/24 Python
如何完美的建立一个python项目
2020/10/09 Python
jupyter notebook更换皮肤主题的实现
2021/01/07 Python
德国原装品牌香水、化妆品和手表网站:BRASTY.DE
2016/10/16 全球购物
伊莱克斯(Electrolux)俄罗斯网上商店:瑞典家用电器品牌
2021/01/23 全球购物
电大物流学生的自我评价
2013/10/25 职场文书
环保倡议书
2014/04/14 职场文书
法院反腐倡廉心得体会
2014/09/09 职场文书
自我工作评价范文
2015/03/06 职场文书
礼貌问候语大全
2015/11/10 职场文书
nginx实现动静分离的方法示例
2021/11/07 Servers
MySQL创建定时任务
2022/01/22 MySQL
Apache Linkis 中间件架构及快速安装步骤
2022/03/16 Servers