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高效编程技巧
Jan 07 Python
在windows下快速搭建web.py开发框架方法
Apr 22 Python
python字典的常用操作方法小结
May 16 Python
Python3学习urllib的使用方法示例
Nov 29 Python
django实现用户登陆功能详解
Dec 11 Python
python dataframe常见操作方法:实现取行、列、切片、统计特征值
Jun 09 Python
python 处理telnet返回的More,以及get想要的那个参数方法
Feb 14 Python
Python对列表的操作知识点详解
Aug 20 Python
python 安装移动复制第三方库操作
Jul 13 Python
Django Form常用功能及代码示例
Oct 13 Python
python归并排序算法过程实例讲解
Nov 04 Python
用基于python的appium爬取b站直播消费记录
Apr 17 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设计模式之观察者模式的应用详解
2013/05/21 PHP
Yii2使用表单上传文件的实例代码
2017/08/03 PHP
浅析PHP开发规范
2018/02/05 PHP
Javascript this指针
2009/07/30 Javascript
突发奇想的一个jquery插件
2010/11/19 Javascript
实现checkbox全选、反选、取消JavaScript小脚本异常
2014/04/10 Javascript
jQuery限制图片大小的方法
2016/05/25 Javascript
解决同一页面中两个iframe互相调用jquery,js函数的方法
2016/12/12 Javascript
分享一个精简的vue.js 图片lazyload插件实例
2017/03/13 Javascript
Bootstrap DateTime Picker日历控件简单应用
2017/03/25 Javascript
详解如何使用webpack打包Vue工程
2017/05/27 Javascript
详谈for循环里面的break和continue语句
2017/07/20 Javascript
微信小程序授权登录及解密unionId出错的方法
2018/09/26 Javascript
微信小程序实现的点击按钮 弹出底部上拉菜单功能示例
2018/12/20 Javascript
使用 node.js 模仿 Apache 小部分功能
2019/07/07 Javascript
[01:31](回顾)杀出重围,决战TI之巅
2014/07/01 DOTA
[49:27]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第一场
2018/04/05 DOTA
Python中使用OpenCV库来进行简单的气象学遥感影像计算
2016/02/19 Python
在阿里云服务器上配置CentOS+Nginx+Python+Flask环境
2016/06/18 Python
python安装cx_Oracle模块常见问题与解决方法
2017/02/21 Python
使用apidoc管理RESTful风格Flask项目接口文档方法
2018/02/07 Python
对python:threading.Thread类的使用方法详解
2019/01/31 Python
对Python3之方法的覆盖与super函数详解
2019/06/26 Python
使用 tf.nn.dynamic_rnn 展开时间维度方式
2020/01/21 Python
AmazeUi Tree(树形结构) 应用小结
2020/08/17 HTML / CSS
荷兰多品牌网上鞋店:Stoute Schoenen
2017/08/24 全球购物
英国鹦鹉店:Parrot Essentials
2018/12/03 全球购物
解释一下ArrayList Vector和LinkedList的实现和区别
2013/04/26 面试题
自荐信封面
2013/12/04 职场文书
运动会表扬稿大全
2014/01/16 职场文书
《最可爱的人》教学反思
2014/02/14 职场文书
会计毕业生自荐书
2014/06/12 职场文书
聋哑人盗窃罪辩护词
2015/05/21 职场文书
宾馆客房管理制度
2015/08/06 职场文书
2016年教代会开幕词
2016/03/04 职场文书
Nginx源码编译安装过程记录
2021/11/17 Servers