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 with用法实例
Apr 14 Python
Python设计模式之命令模式简单示例
Jan 10 Python
解决pycharm无法调用pip安装的包问题
May 18 Python
浅谈Django中的数据库模型类-models.py(一对一的关系)
May 30 Python
Django框架多表查询实例分析
Jul 04 Python
对Python生成汉字字库文字,以及转换为文字图片的实例详解
Jan 29 Python
Django 中自定义 Admin 样式与功能的实现方法
Jul 04 Python
Django自定义模板过滤器和标签的实现方法
Aug 21 Python
PyQt5中多线程模块QThread使用方法的实现
Jan 31 Python
python用TensorFlow做图像识别的实现
Apr 21 Python
python利用platform模块获取系统信息
Oct 09 Python
Python机器学习工具scikit-learn的使用笔记
Jan 28 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添加MySQL数据记录代码
2008/06/07 PHP
php foreach循环中使用引用的问题
2013/11/06 PHP
php判断GIF图片是否为动画的方法
2020/09/04 PHP
PHP XML和数组互相转换详解
2016/10/26 PHP
php实现的XML操作(读取)封装类完整实例
2017/02/23 PHP
js循环改变div颜色具体方法
2013/06/25 Javascript
Highcharts 非常实用的Javascript统计图demo示例
2013/07/03 Javascript
jQuery中delegate和on的用法与区别详细解析
2014/01/26 Javascript
兼容主流浏览器的jQuery+CSS 实现遮罩层的简单代码
2014/10/14 Javascript
浅谈jQuery异步对象(XMLHttpRequest)
2014/11/17 Javascript
JS实现仿PS的调色板效果完整实例
2016/12/21 Javascript
div中文字内容溢出常见的解决方法
2017/03/16 Javascript
使用 Node.js 对文本内容分词和关键词抽取
2017/05/27 Javascript
详解在vue-cli中使用路由
2017/09/25 Javascript
深入了解javascript 数组的sort方法
2018/06/01 Javascript
小程序自定义组件实现城市选择功能
2018/07/18 Javascript
javascript实现商品图片放大镜
2019/11/28 Javascript
JS绘图Flot如何实现动态可刷新曲线图
2020/10/16 Javascript
vue 通过 Prop 向子组件传递数据的实现方法
2020/10/30 Javascript
python进程管理工具supervisor使用实例
2014/09/17 Python
17个Python小技巧分享
2015/01/23 Python
pymongo实现多结果进行多列排序的方法
2015/05/16 Python
Python字典数据对象拆分的简单实现方法
2017/12/05 Python
python爬虫实例详解
2018/06/19 Python
python将字符串转变成dict格式的实现
2019/11/18 Python
pandas 中对特征进行硬编码和onehot编码的实现
2019/12/20 Python
python基于opencv检测程序运行效率
2019/12/28 Python
HTML5 Canvas如何实现纹理填充与描边(Fill And Stroke)
2013/07/15 HTML / CSS
AmazeUI的JS表单验证框架实战示例分享
2020/08/21 HTML / CSS
ONLY德国官方在线商店:购买时尚女装
2017/09/21 全球购物
Java里面如何把一个Array数组转换成Collection, List
2013/07/26 面试题
优秀毕业生事迹材料
2014/02/12 职场文书
销售经理岗位职责范本
2015/04/02 职场文书
100句拼搏进取的名言警句,值得一读!
2019/10/07 职场文书
浅谈Nginx 中的两种限流方式
2021/03/31 Servers
mysql序号rownum行号实现方式
2022/12/24 MySQL