Python使用os模块和fileinput模块来操作文件目录


Posted in Python onJanuary 19, 2016

os模块
在python编程中,我们会经常使用到文件和目录,这些操作python提供一个os模块,里面有很多操作文件和目录的函数.

下面介绍os的常用功能

1.获取当前路径

>>> os.getcwd()
'/root/python'

2.获取目录中的内容

>>> os.listdir(os.getcwd())
['deco.py', '6.py', 'inputfile.py', 'uniFile.py', 'oddnogen.py', 'ospathex.py', 'operate.py', 'bianliang.py', 'typecheck1.py']

3.创建目录

>>> os.mkdir('/root/pythontest')

   一次性创建嵌套目录可使用os.makedirs,makedirs可以生成多层递归目录,removedirs可以删除多层递归的空目录,若目录中有文件则无法删除;os.system():运行shell命令;

>>> os.environ['HOME']
'/root'
>>> os.makedirs(os.path.join(os.environ['HOME'],'test','py'))
>>> os.system('ls -lR /root/test')
/root/test:
total 4
drwxr-xr-x 2 root root 4096 2013-03-29 17:27 py
 
/root/test/py:
total 0
0

4.改变工作目录

>>> os.getcwd()
'/root/python'
>>> os.chdir('/etc')
>>> os.getcwd()
'/etc'

5.删除目录

>>> os.rmdir('/root/pythontest')
>>>

注:删除目录必须是空目录

6.删除文件

>>> os.remove('/root/pytest.py')

7.重命名文件或者目录

>>> os.rename('/root/pytest.py','/root/test.py')

8.字符串给出当前平台使用的终止符,例如:Windows使用'\r\n',Linux使用'\n'

>>> os.linesep
'\n'

以下是os.path模块

9.判断是否是目录

>>> os.path.isdir('/root/python')
True

10.判断是否为文件

>>> os.path.isfile('/root/python')
False

11.返回一个路径的目录名和文件名

>>> os.path.split(os.getcwd())
('/root', 'python')

12.判断是否存在文件或目录name

>>> os.path.exists('/root')
True
>>> os.path.exists('/root/1.py')
False

13.获得文件大小

>>> os.path.getsize('/root/python/if.py')
282

14.返回文件路径,返回文件名

>>> os.path.dirname('/root/python/if.py')
'/root/python'
>>> os.path.basename('/root/python/if.py')
'if.py'

15.连接目录与文件名或目录

>>> os.path.join('/dave/test/','1.py')
'/dave/test/1.py'

判断一个目录里哪些是文件哪些是目录.

>>> for file in os.listdir('/root/python'):
...   if os.path.isdir(file):
...     print file,"is a directory"
...   else:
...     print file,"is a file"
... 
deco.py is a file
inputfile.py is a file
operate.py is a file
hello.pyc is a file
userpw.py is a file
4.py is a file
answer is a directory

fileinput模块
fileinput模块可以遍历文本文件的所有行.它的工作方式和readlines很类似,不同点在于,它不是将全部的行读到列表中而是创建了一个xreadlines对象.

下面是fileinput模块中的常用函数

  • input() #它会返回能够用于for循环遍历的对象.
  • filename() #返回当前文件的名称
  • lineno() #返回当前(累计)的行数
  • filelineno() #返回当前文件的行数
  • isfirstline() #检查当前行是否是文件的第一行
  • close() #关闭序列
>>> import fileinput
>>> for eachline in fileinput.input("/root/datafile.txt"):
...   print eachline
... 
Dave
 
python
 
>>> for eachline in fileinput.input("/root/datafile.txt"):
...   print fileinput.filename()
... 
/root/datafile.txt
/root/datafile.txt
>>> for eachline in fileinput.input("/root/datafile.txt"):
...   print fileinput.lineno(),eachline
... 
1 Dave
 
2 python
 
>>> for eachline in fileinput.input("/root/datafile.txt"):
...   if fileinput.isfirstline():
...     print eachline
...   else:
...     break
... 
Dave

下面是一个关于日志分析的小实例,将日志中截取匹配的电话号码,如800-333-1212

root@10.1.1.45:~# cat telphone.log 
027-987-1212
02187899682
021-110-9632
root@10.1.1.45:~# cat fileinputtest.py 
#!/usr/bin/python2.5
 
import fileinput
import sys
import re
 
pattern = "\d{3}-\d{3}-\d{4}"
filePath = "/root/telphone.log"
 
for eachline in fileinput.input(filePath):
  a = re.search(pattern,eachline)
  if a:
#    sys.stdout.write("============\n")
#    sys.stdout.write(eachline)
     print "============"
     print 'line:',fileinput.lineno(),'filename:',fileinput.filename(),'length:',len(eachline.strip('\n')),eachline
root@10.1.1.45:~# ./fileinputtest.py 
============
line: 1 filename: /root/telphone.log length: 12 027-987-1212
 
============
line: 3 filename: /root/telphone.log length: 12 021-110-9632
Python 相关文章推荐
python实现爬虫下载漫画示例
Feb 16 Python
python异步任务队列示例
Apr 01 Python
Python使用py2exe打包程序介绍
Nov 20 Python
使用Python制作自动推送微信消息提醒的备忘录功能
Sep 06 Python
python实现感知器算法(批处理)
Jan 18 Python
学习python分支结构
May 17 Python
python爬虫神器Pyppeteer入门及使用
Jul 13 Python
Python安装selenium包详细过程
Jul 23 Python
python递归调用中的坑:打印有值, 返回却None
Mar 16 Python
Python暴力破解Mysql数据的示例
Nov 09 Python
python调用win32接口进行截图的示例
Nov 11 Python
利用Python批量识别电子账单数据的方法
Feb 08 Python
举例讲解Python面相对象编程中对象的属性与类的方法
Jan 19 #Python
python结合API实现即时天气信息
Jan 19 #Python
Python+django实现文件下载
Jan 17 #Python
Python+django实现文件上传
Jan 17 #Python
初步剖析C语言编程中的结构体
Jan 16 #Python
举例讲解Python设计模式编程的代理模式与抽象工厂模式
Jan 16 #Python
python实现发送和获取手机短信验证码
Jan 15 #Python
You might like
部署PHP项目应该注意的几点事项分享
2013/12/20 PHP
深入解析PHP的Yii框架中的缓存功能
2016/03/29 PHP
微信支付的开发流程详解
2016/09/13 PHP
Javascript-Mozilla和IE中的一个函数直接量的问题分析
2007/08/12 Javascript
javascript引用对象的方法代码
2007/08/13 Javascript
读jQuery之八 包装事件对象
2011/06/21 Javascript
人人网javascript面试题 可以提前实现下
2012/01/05 Javascript
基于 Docker 开发 NodeJS 应用
2014/07/30 NodeJs
jQuery选择器源码解读(七):elementMatcher函数
2015/03/31 Javascript
jquery使用each方法遍历json格式数据实例
2015/05/18 Javascript
分享一些常用的jQuery动画事件和动画函数
2015/11/27 Javascript
Node.js文件操作方法汇总
2016/03/22 Javascript
nodejs模块学习之connect解析
2017/07/05 NodeJs
Webpack中雪碧图插件使用详解
2018/05/25 Javascript
详解vue指令与$nextTick 操作DOM的不同之处
2018/08/02 Javascript
javascript实现文本框标签验证的实例代码
2018/10/14 Javascript
Vue.js构建你的第一个包并在NPM上发布的方法步骤
2019/05/01 Javascript
vue路由教程之静态路由
2019/09/03 Javascript
js贪心算法 钱币找零问题代码实例
2019/09/11 Javascript
[43:51]2014 DOTA2国际邀请赛中国区预选赛 Dream Times VS TongFu
2014/05/22 DOTA
[51:30]OG vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.26
2018/08/30 DOTA
python PyTorch参数初始化和Finetune
2018/02/11 Python
PyQt5 QTable插入图片并动态更新的实例
2019/06/18 Python
Python Django 封装分页成通用的模块详解
2019/08/21 Python
使用PDF.JS插件在HTML中预览PDF文件的方法
2018/08/29 HTML / CSS
Clarins娇韵诗美国官网:法国天然护肤品牌
2016/09/26 全球购物
项目总经理岗位职责
2014/02/14 职场文书
善意的谎言事例
2014/02/15 职场文书
《世界多美呀》教学反思
2014/03/02 职场文书
安全生产目标责任书
2014/04/14 职场文书
物流管理专业求职信
2014/05/29 职场文书
教学改革问题查摆整改措施
2014/09/27 职场文书
爱心捐赠活动简讯
2015/07/20 职场文书
2015年中秋寄语
2015/07/31 职场文书
bootstrapv4轮播图去除两侧阴影及线框的方法
2022/02/15 HTML / CSS
Python探索生命起源 matplotlib细胞自动机动画演示
2022/04/21 Python