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的Django框架中Manager方法的使用
Jul 21 Python
Tornado协程在python2.7如何返回值(实现方法)
Jun 22 Python
浅谈python中的数字类型与处理工具
Aug 02 Python
python:pandas合并csv文件的方法(图书数据集成)
Apr 12 Python
利用pandas读取中文数据集的方法
Jul 25 Python
python程序控制NAO机器人行走
Apr 29 Python
python3对接mysql数据库实例详解
Apr 30 Python
django将数组传递给前台模板的方法
Aug 06 Python
python解释器spython使用及原理解析
Aug 24 Python
Django+uni-app实现数据通信中的请求跨域的示例代码
Oct 12 Python
Python pip配置国内源的方法
Feb 14 Python
Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)
Dec 07 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 冒泡排序 交换排序法
2011/05/10 PHP
PHP里8个鲜为人知的安全函数分析
2014/12/09 PHP
php实现汉字验证码和算式验证码的方法
2015/03/07 PHP
jQuery 判断元素上是否绑定了事件
2009/10/28 Javascript
Raphael一个用于在网页中绘制矢量图形的Javascript库
2013/01/08 Javascript
javascript操作excel生成报表示例
2014/05/08 Javascript
JavaScript中的Function函数
2015/08/27 Javascript
jquery插件jquery.confirm弹出确认消息
2015/12/22 Javascript
基于JavaScript实现定时跳转到指定页面
2016/01/01 Javascript
Angularjs 滚动加载更多数据
2016/03/17 Javascript
js实现StringBuffer的简单实例
2016/09/02 Javascript
JS实现全屏的四种写法
2016/12/30 Javascript
Bootstrap 下拉多选框插件Bootstrap Multiselect
2017/01/22 Javascript
JS实现的简单拖拽功能示例
2017/03/13 Javascript
js禁止浏览器的回退事件
2017/04/20 Javascript
jquery点赞功能实现代码 点个赞吧!
2020/05/29 jQuery
一个简易时钟效果js实现代码
2020/03/25 Javascript
关于微信小程序bug记录与解决方法
2018/08/15 Javascript
使用electron制作满屏心特效的示例代码
2018/11/27 Javascript
Node如何后台数据库使用增删改查功能
2019/11/21 Javascript
js实现时分秒倒计时
2019/12/03 Javascript
Python获取电脑硬件信息及状态的实现方法
2014/08/29 Python
酷! 程序员用Python带你玩转冲顶大会
2018/01/17 Python
详解Python 协程的详细用法使用和例子
2018/06/15 Python
在pyqt5中QLineEdit里面的内容回车发送的实例
2019/06/21 Python
对Django项目中的ORM映射与模糊查询的使用详解
2019/07/18 Python
Python实现图片识别加翻译功能
2019/12/26 Python
Python3如何使用多线程升程序运行速度
2020/08/11 Python
Python 将代码转换为可执行文件脱离python环境运行(步骤详解)
2021/01/25 Python
澳大利亚商务邀请函
2014/01/17 职场文书
教师业务学习制度
2014/01/25 职场文书
招标授权委托书样本
2014/09/23 职场文书
mysql死锁和分库分表问题详解
2021/04/16 MySQL
Linux系统下安装PHP7.3版本
2021/06/26 PHP
Go语言安装并操作redis的go-redis库
2022/04/14 Golang
vue el-table实现递归嵌套的示例代码
2022/08/14 Vue.js