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动态监控日志内容的示例
Feb 16 Python
Python随手笔记之标准类型内建函数
Dec 02 Python
python3写爬取B站视频弹幕功能
Dec 22 Python
详解pandas安装若干异常及解决方案总结
Jan 10 Python
python输入多行字符串的方法总结
Jul 02 Python
解决使用export_graphviz可视化树报错的问题
Aug 09 Python
python3 实现爬取TOP500的音乐信息并存储到mongoDB数据库中
Aug 24 Python
Flask中endpoint的理解(小结)
Dec 11 Python
Python hashlib模块实例使用详解
Dec 24 Python
keras自定义回调函数查看训练的loss和accuracy方式
May 23 Python
使用python实现名片管理系统
Jun 18 Python
Pandas对每个分组应用apply函数的实现
Dec 13 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下获取客户端ip地址的函数
2010/03/15 PHP
PHP类的声明与实例化及构造方法与析构方法详解
2016/01/26 PHP
php实现图片上传时添加文字和图片水印技巧
2020/04/18 PHP
php排序算法实例分析
2016/10/17 PHP
php四种定界符详解
2017/02/16 PHP
PHP5.6读写excel表格文件操作示例
2019/02/26 PHP
基于jquery的时间段实现代码
2012/08/02 Javascript
浅析JavaScript中的隐式类型转换
2013/12/05 Javascript
在Node.js中实现文件复制的方法和实例
2014/06/05 Javascript
JavaScript匿名函数用法分析
2015/02/13 Javascript
一些实用性较高的js方法
2016/04/19 Javascript
jQuery插件echarts实现的去掉X轴、Y轴和网格线效果示例【附demo源码下载】
2017/03/04 Javascript
JS数组求和的常用方法实例小结
2019/01/07 Javascript
详解小程序设置缓存并且不覆盖原有数据
2019/04/15 Javascript
如何解决js函数防抖、节流出现的问题
2019/06/17 Javascript
vue+elementUI实现简单日历功能
2020/09/24 Javascript
对Python的Django框架中的项目进行单元测试的方法
2016/04/11 Python
Windows下Eclipse+PyDev配置Python+PyQt4开发环境
2016/05/17 Python
django上传图片并生成缩略图方法示例
2017/12/11 Python
使用python Telnet远程登录执行程序的方法
2019/01/26 Python
将自己的数据集制作成TFRecord格式教程
2020/02/17 Python
pygame实现弹球游戏
2020/04/14 Python
解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题
2020/04/20 Python
pandas数据处理之绘图的实现
2020/06/15 Python
Python实现验证码识别
2020/06/15 Python
css背景图片的背景裁切、背景透明度、背景变换等效果运用
2012/12/24 HTML / CSS
布里斯班女装时尚品牌:Adrift
2017/12/28 全球购物
计算机专业自我鉴定
2013/10/15 职场文书
前台接待的工作职责
2013/11/21 职场文书
投标单位介绍信
2014/01/09 职场文书
社区消防工作实施方案
2014/03/21 职场文书
党的群众路线教育实践活动个人对照检查材料(乡镇)
2014/11/05 职场文书
新员工考核评语
2014/12/31 职场文书
裁员通知
2015/04/25 职场文书
新郎婚礼致辞
2015/07/27 职场文书
vue postcss-px2rem 自适应布局
2022/05/15 Vue.js