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实现汉诺塔方法汇总
Jul 25 Python
遍历python字典几种方法总结(推荐)
Sep 11 Python
你应该知道的python列表去重方法
Jan 17 Python
Python批量查询域名是否被注册过
Jun 21 Python
python交互式图形编程实例(二)
Nov 17 Python
python logging日志模块以及多进程日志详解
Apr 18 Python
pandas进行数据的交集与并集方式的数据合并方法
Jun 27 Python
WIn10+Anaconda环境下安装PyTorch(避坑指南)
Jan 30 Python
使用python实现离散时间傅里叶变换的方法
Sep 02 Python
pytorch nn.Conv2d()中的padding以及输出大小方式
Jan 10 Python
Tensorflow训练模型越来越慢的2种解决方案
Feb 07 Python
Python Process创建进程的2种方法详解
Jan 25 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简单压缩css样式示例
2016/09/22 PHP
laravel清除视图缓存的代码
2019/10/23 PHP
用javascript动态调整iframe高度的方法
2007/03/06 Javascript
SyntaxHighlighter代码加色使用方法
2008/09/07 Javascript
解析Javascript中难以理解的11个问题
2013/12/09 Javascript
一个JavaScript防止表单重复提交的实例
2014/10/21 Javascript
jQuery中:checked选择器用法实例
2015/01/04 Javascript
JavaScript中反正弦函数Math.asin()的使用简介
2015/06/14 Javascript
基于js中的原型、继承的一些想法
2016/08/10 Javascript
JavaScript面向对象编写购物车功能
2016/08/19 Javascript
AngularJS中如何使用echart插件示例详解
2016/10/26 Javascript
JS 实现Base64编码与解码实例详解
2016/11/07 Javascript
JS实现物体带缓冲的间歇运动效果示例
2016/12/22 Javascript
Vue 父子组件、组件间通信
2017/03/08 Javascript
JS+jQuery实现注册信息的验证功能
2017/09/26 jQuery
Vue 2.0学习笔记之使用$refs访问Vue中的DOM
2017/12/19 Javascript
cdn模式下vue的基本用法详解
2018/10/07 Javascript
Layer UI表格列日期格式化及取消自动填充日期的实现方法
2020/05/10 Javascript
Vue性能优化的方法
2020/07/30 Javascript
vue使用require.context实现动态注册路由
2020/12/25 Vue.js
python中子类继承父类的__init__方法实例
2016/12/15 Python
解决python通过cx_Oracle模块连接Oracle乱码的问题
2018/10/18 Python
Python3.5 Json与pickle实现数据序列化与反序列化操作示例
2019/04/29 Python
python模拟鼠标点击和键盘输入的操作
2019/08/04 Python
python编写简单端口扫描器
2019/09/04 Python
Ubuntu下Python+Flask分分钟搭建自己的服务器教程
2019/11/19 Python
Python实现点云投影到平面显示
2020/01/18 Python
Python 整行读取文本方法并去掉readlines换行\n操作
2020/09/03 Python
世界上最好的精品店:Shoptiques
2018/02/05 全球购物
英国定做窗帘和纺织品面料一站式商店:Dekoria
2018/08/29 全球购物
YSL圣罗兰美妆俄罗斯官网:Yves Saint Lauret RU
2020/09/23 全球购物
中间件分为哪几类
2012/03/14 面试题
幼儿园中班教师个人工作总结
2015/02/06 职场文书
Vue Element UI自定义描述列表组件
2021/05/18 Vue.js
如何利用opencv判断两张图片是否相同详解
2021/07/07 Python
SQL优化老出错,那是你没弄明白MySQL解释计划用法
2021/11/27 MySQL