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中的yield浅析
Jun 16 Python
跟老齐学Python之开始真正编程
Sep 12 Python
Python中的作用域规则详解
Jan 30 Python
python的else子句使用指南
Feb 27 Python
Windows中使用wxPython和py2exe开发Python的GUI程序的实例教程
Jul 11 Python
Python实现针对含中文字符串的截取功能示例
Sep 22 Python
浅析python协程相关概念
Jan 20 Python
Python实现压缩文件夹与解压缩zip文件的方法
Sep 01 Python
Python清空文件并替换内容的实例
Oct 22 Python
浅谈keras.callbacks设置模型保存策略
Jun 18 Python
selenium+超级鹰实现模拟登录12306
Jan 24 Python
Pytorch 如何加速Dataloader提升数据读取速度
May 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
main.php
2006/12/09 PHP
php strrpos()与strripos()函数
2013/08/31 PHP
关于php支持分块与断点续传文件下载功能代码
2014/05/09 PHP
正确的PHP匹配UTF-8中文的正则表达式
2015/05/13 PHP
PHP+Ajax验证码验证用户登录
2016/07/20 PHP
微信公众平台开发(五) 天气预报功能开发
2016/12/03 PHP
[原创]PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】
2019/07/12 PHP
select组合框option的捕捉实例代码
2008/09/30 Javascript
js 本地预览的简单实现方法
2014/02/18 Javascript
Javascript 中创建自定义对象的方法汇总
2014/12/04 Javascript
微信小程序 slider 详解及实例代码
2017/01/10 Javascript
微信小程序scroll-view实现横向滚动和上拉加载示例
2017/03/06 Javascript
Vue 2.x教程之基础API
2017/03/06 Javascript
Vue单页式应用(Hash模式下)实现微信分享的实例
2017/07/21 Javascript
常用的9个JavaScript图表库详解
2017/12/19 Javascript
AngularJS动态添加数据并删除的实例
2018/02/27 Javascript
详解在Vue中使用TypeScript的一些思考(实践)
2018/07/06 Javascript
三种Webpack打包方式(小结)
2018/09/19 Javascript
Angular6新特性之Angular Material
2018/12/28 Javascript
jquery实现图片无缝滚动 蒙版遮蔽效果
2020/01/11 jQuery
Python测试人员需要掌握的知识
2018/02/08 Python
tensorflow入门之训练简单的神经网络方法
2018/02/26 Python
tensorflow实现图像的裁剪和填充方法
2018/07/27 Python
python3 爬取图片的实例代码
2018/11/06 Python
H5新属性audio音频和video视频的控制详解(推荐)
2016/12/09 HTML / CSS
英国景点门票网站:attractiontix
2019/08/27 全球购物
出纳工作岗位责任制
2014/02/02 职场文书
股东合作协议书范本
2014/04/14 职场文书
小学教师评语大全
2014/04/23 职场文书
网络舆情信息简报
2015/07/21 职场文书
解决Nginx 配置 proxy_pass 后 返回404问题
2021/03/31 Servers
python单元测试之pytest的使用
2021/06/07 Python
mysql insert 存在即不插入语法说明
2022/03/25 MySQL
Python实现科学占卜 让视频自动打码
2022/04/09 Python
Vue OpenLayer测距功能的实现
2022/04/20 Vue.js
TS 类型收窄教程示例详解
2022/09/23 Javascript