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实现列表转换成字典数据结构的方法
Mar 11 Python
Python实现读取json文件到excel表
Nov 18 Python
PyQt5 QSerialPort子线程操作的实现
Apr 21 Python
Python设置在shell脚本中自动补全功能的方法
Jun 25 Python
python中的列表与元组的使用
Aug 08 Python
解决Jupyter NoteBook输出的图表太小看不清问题
Apr 16 Python
python3通过qq邮箱发送邮件以及附件
May 20 Python
python如何保存文本文件
Jun 07 Python
解决PDF 转图片时丢文字的一种可能方式
Mar 04 Python
解决Pytorch半精度浮点型网络训练的问题
May 24 Python
 Python 中 logging 模块使用详情
Mar 03 Python
Python列表的索引与切片
Apr 07 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简洁函数(PHP简单明了函数语法)
2012/06/10 PHP
PHP设计模式之责任链模式的深入解析
2013/06/13 PHP
有关于PHP中常见数据类型的汇总分享
2014/01/06 PHP
硬盘浏览程序,保存成网页格式便可使用
2006/12/03 Javascript
IE8 引入跨站数据获取功能说明
2008/07/22 Javascript
关于JavaScript的面向对象和继承有利新手学习
2013/01/11 Javascript
jQuery获取(选中)单选,复选框,下拉框中的值
2014/02/21 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 图片库
2015/01/09 Javascript
Javascript中Array用法实例分析
2015/06/13 Javascript
全面理解闭包机制
2016/07/11 Javascript
Bootstrap基本模板的使用和理解1
2016/12/14 Javascript
jQuery自定义插件详解及实例代码
2016/12/29 Javascript
vue学习笔记之指令v-text && v-html && v-bind详解
2017/05/12 Javascript
Vue实现远程获取路由与页面刷新导致404错误的解决
2019/01/31 Javascript
Vue 后台管理类项目兼容IE9+的方法示例
2019/02/20 Javascript
LayUI switch 开关监听 获取属性值、更改状态的方法
2019/09/21 Javascript
原生JS实现萤火虫效果
2020/03/07 Javascript
在Python的Bottle框架中使用微信API的示例
2015/04/23 Python
python装饰器初探(推荐)
2016/07/21 Python
python爬虫爬取快手视频多线程下载功能
2018/02/28 Python
详解Python读取yaml文件多层菜单
2019/03/23 Python
Python中的引用知识点总结
2019/05/20 Python
PYQT5 vscode联合操作qtdesigner的方法
2020/03/24 Python
Python读入mnist二进制图像文件并显示实例
2020/04/24 Python
美国领先的户外服装与装备用品店:Moosejaw
2016/08/25 全球购物
买卖正宗运动鞋:GOAT
2019/12/06 全球购物
某同学的自我鉴定范文
2013/12/26 职场文书
投资合作协议书范本
2014/04/17 职场文书
团日活动总结报告
2014/06/25 职场文书
汽车转让协议书范本
2014/12/07 职场文书
布达拉宫的导游词
2015/02/02 职场文书
2015年计生工作总结范文
2015/04/24 职场文书
幼儿园卫生保健制度
2015/08/05 职场文书
创业计划书之游泳馆
2019/09/16 职场文书
python geopandas读取、创建shapefile文件的方法
2021/06/29 Python
SpringBoot读取Resource下文件的4种方法
2021/07/02 Java/Android