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进程类subprocess的一些操作方法例子
Nov 22 Python
Python实现递归遍历文件夹并删除文件
Apr 18 Python
Windows下搭建python开发环境详细步骤
Jul 20 Python
Python 私有函数的实例详解
Sep 11 Python
python爬虫基本知识
Mar 05 Python
Python基于递归算法求最小公倍数和最大公约数示例
Jul 27 Python
详解python3中的真值测试
Aug 13 Python
python下载微信公众号相关文章
Feb 26 Python
Python中super函数用法实例分析
Mar 18 Python
python的命名规则知识点总结
Oct 04 Python
Python基于mediainfo批量重命名图片文件
Dec 29 Python
如何查看python关键字
Jan 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
用windows下编译过的eAccelerator for PHP 5.1.6实现php加速的使用方法
2007/09/30 PHP
9条PHP编程小知识及易犯的小错误
2015/01/22 PHP
php计数排序算法的实现代码(附四个实例代码)
2020/03/31 PHP
FLASH 广告之外的链接
2008/12/16 Javascript
javascript之Partial Application学习
2013/01/10 Javascript
jquery使用ColorBox弹出图片组浏览层实例演示
2013/03/14 Javascript
javascript实现获取cookie过期时间的变通方法
2014/08/14 Javascript
JS动态修改iframe高度和宽度的方法
2015/04/01 Javascript
jQuery实现的在线答题功能
2015/04/12 Javascript
手机开发必备技巧:javascript及CSS功能代码分享
2015/05/25 Javascript
jquery简单实现外部链接用新窗口打开的方法
2015/05/30 Javascript
javascript拖拽应用实例(二)
2016/03/25 Javascript
jQuery根据表单name获取值的方法
2016/05/24 Javascript
浅谈javascript运算符——条件,逗号,赋值,()和void运算符
2016/07/15 Javascript
vue.js学习之vue-cli定制脚手架详解
2017/07/02 Javascript
浅谈Vue.js之初始化el以及数据的绑定说明
2019/11/14 Javascript
js面向对象封装级联下拉菜单列表的实现步骤
2021/02/08 Javascript
[40:10]2015国际邀请赛全明星表演赛
2015/08/07 DOTA
python中字典dict常用操作方法实例总结
2015/04/04 Python
Python查询阿里巴巴关键字排名的方法
2015/07/08 Python
Python中的二维数组实例(list与numpy.array)
2018/04/13 Python
Python面向对象总结及类与正则表达式详解
2019/04/18 Python
Python QQBot库的QQ聊天机器人
2019/06/19 Python
Django自带的加密算法及加密模块详解
2019/12/03 Python
sklearn的predict_proba使用说明
2020/06/28 Python
Pandas的Apply函数具体使用
2020/07/21 Python
经验丰富程序员才知道的8种高级Python技巧
2020/07/27 Python
Qoo10马来西亚:全球时尚和引领潮流的购物市场
2016/08/25 全球购物
美国在线自行车商店:Jenson USA
2018/05/22 全球购物
最好的意大利皮夹克:D’Arienzo
2018/12/04 全球购物
阿迪达斯印尼官方网站:adidas印尼
2020/02/10 全球购物
房地产出纳岗位职责
2013/12/01 职场文书
乒乓球兴趣小组活动总结
2014/07/08 职场文书
2019通用版新员工入职培训方案!
2019/07/11 职场文书
Linux中如何安装并部署Redis
2022/04/18 Servers
Python通用验证码识别OCR库ddddocr的安装使用教程
2022/07/07 Python