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 Tkinter基础控件用法
Sep 03 Python
python学习之第三方包安装方法(两种方法)
Jul 30 Python
基于Python的XSS测试工具XSStrike使用方法
Jul 29 Python
python利用dir函数查看类中所有成员函数示例代码
Sep 08 Python
Python 旋转打印各种矩形的方法
Jul 09 Python
python实现键盘输入的实操方法
Jul 16 Python
Python学习笔记之迭代器和生成器用法实例详解
Aug 08 Python
python实现截取屏幕保存文件,删除N天前截图的例子
Aug 27 Python
python实现连续变量最优分箱详解--CART算法
Nov 22 Python
python 定义类时,实现内部方法的互相调用
Dec 25 Python
Django 实现将图片转为Base64,然后使用json传输
Mar 27 Python
提取视频中的音频 Python只需要三行代码!
May 10 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的curl实现get和post的代码
2008/08/23 PHP
解析yahoo邮件用phpmailer发送的实例
2013/06/24 PHP
解析func_num_args与func_get_args函数的使用
2013/06/24 PHP
PHP翻页跳转功能实现方法
2020/11/30 PHP
php项目开发中用到的快速排序算法分析
2016/06/25 PHP
php基于curl实现随机ip地址抓取内容的方法
2016/10/11 PHP
JS+PHP实现用户输入数字后显示最大的值及所在位置
2017/06/19 PHP
php+laravel依赖注入知识点总结
2019/11/04 PHP
Js sort排序使用方法
2011/10/17 Javascript
js渐变显示渐变消失示例代码
2013/08/01 Javascript
jquery中animate的stop()方法作用实例分析
2015/01/30 Javascript
谈谈Jquery ajax中success和complete有哪些不同点
2015/11/20 Javascript
BootStrap中
2016/12/10 Javascript
JavaScript中数组Array方法详解
2017/02/27 Javascript
前端开发之CSS原理详解
2017/03/11 Javascript
vue结合axios与后端进行ajax交互的方法
2018/07/06 Javascript
javascript中call,apply,callee,caller用法实例分析
2019/07/24 Javascript
layui数据表格重载实现往后台传参
2019/11/15 Javascript
node.js express捕获全局异常的三种方法实例分析
2019/12/27 Javascript
vue ssr+koa2构建服务端渲染的示例代码
2020/03/23 Javascript
原生js实现九宫格拖拽换位
2021/01/26 Javascript
python计算N天之后日期的方法
2015/03/31 Python
Python错误处理操作示例
2018/07/18 Python
Linux下python制作名片示例
2018/07/20 Python
python3安装crypto出错及解决方法
2019/07/30 Python
使用turtle绘制五角星、分形树
2019/10/06 Python
python判断变量是否为列表的方法
2020/09/17 Python
python 实现围棋游戏(纯tkinter gui)
2020/11/13 Python
CSS3中利用animation属性创建雪花飘落特效
2014/05/14 HTML / CSS
三好学生先进事迹材料
2014/08/28 职场文书
领导干部作风整顿剖析材料
2014/10/11 职场文书
2014年基层党建工作总结
2014/11/11 职场文书
小学生作文评语集锦
2014/12/25 职场文书
主持人开场白台词
2015/05/29 职场文书
2021年国产动漫公司排行前十名,玄机科技上榜,第二推出过铠甲勇士
2022/03/18 杂记
MyBatis配置文件解析与MyBatis实例演示
2022/04/07 Java/Android