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 selenium 三种等待方式解读
Sep 15 Python
Python入门之三角函数atan2()函数详解
Nov 08 Python
Python Paramiko模块的使用实际案例
Feb 01 Python
python实现猜数字小游戏
Mar 24 Python
Python OpenCV处理图像之滤镜和图像运算
Jul 10 Python
CentOS下Python3的安装及创建虚拟环境的方法
Nov 28 Python
检测python爬虫时是否代理ip伪装成功的方法
Jul 12 Python
Python+Pyqt实现简单GUI电子时钟
Feb 22 Python
Python高级特性 切片 迭代解析
Aug 23 Python
python程序中的线程操作 concurrent模块使用详解
Sep 23 Python
python如何通过闭包实现计算器的功能
Feb 22 Python
python编程学习使用管道Pipe编写优化代码
Nov 20 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概率算法实例
2014/04/09 PHP
codeigniter框架The URI you submitted has disallowed characters错误解决方法
2014/05/06 PHP
php遍历数组的4种方法总结
2014/07/05 PHP
php实现redis数据库指定库号迁移的方法
2015/01/14 PHP
php实现在服务器上创建目录的方法
2015/03/16 PHP
Yii框架的路由配置方法分析
2019/09/09 PHP
Laravel框架控制器,视图及模型操作图文详解
2019/12/04 PHP
jQuery一步一步实现跨浏览器的可编辑表格,支持IE、Firefox、Safari、Chrome、Opera
2009/08/28 Javascript
php图像生成函数之间的区别分析
2012/12/06 Javascript
推荐一款jQuery插件模板
2015/01/09 Javascript
jQuery实现的表头固定效果实例【附完整demo源码下载】
2016/08/01 Javascript
Bootstrap和Java分页实例第一篇
2016/12/23 Javascript
使用Bootstrap + Vue.js实现添加删除数据示例
2017/02/27 Javascript
详解微信小程序 通过控制CSS实现view隐藏与显示
2017/05/24 Javascript
JavaScript订单操作小程序完整版
2017/06/23 Javascript
使用Vue.js和Element-UI做一个简单登录页面的实例
2018/02/23 Javascript
js实现图片放大并跟随鼠标移动特效
2019/01/18 Javascript
JavaScript设计模式之观察者模式与发布订阅模式详解
2020/05/07 Javascript
利用Python和OpenCV库将URL转换为OpenCV格式的方法
2015/03/27 Python
python实现的希尔排序算法实例
2015/07/01 Python
python之virtualenv的简单使用方法(必看篇)
2017/11/25 Python
python实现最长公共子序列
2018/05/22 Python
Python中的groupby分组功能的实例代码
2018/07/11 Python
python批量修改图片后缀的方法(png到jpg)
2018/10/25 Python
Python包和模块的分发详细介绍
2020/06/19 Python
Ruby如何实现动态方法调用
2012/11/18 面试题
生物专业个人自荐信范文
2013/11/29 职场文书
空中乘务员岗位职责
2014/03/08 职场文书
保险公司年会主持词
2014/03/22 职场文书
审计班子对照检查材料
2014/08/27 职场文书
信息与计算机科学职业规划范文:成为一艘有方向的船
2014/09/11 职场文书
小学生国庆65周年演讲稿范文(2篇)
2014/09/21 职场文书
考试作弊被抓检讨书
2014/10/02 职场文书
教师先进事迹材料
2014/12/16 职场文书
Nginx配置SSL证书出错解决方案
2021/03/31 Servers
Python matplotlib 利用随机函数生成变化图形
2022/04/26 Python