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用于url解码和中文解析的小脚本(python url decoder)
Aug 11 Python
Python Tkinter基础控件用法
Sep 03 Python
python任务调度实例分析
May 19 Python
Python中的lstrip()方法使用简介
May 19 Python
Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)
Sep 21 Python
Python绑定方法与非绑定方法详解
Aug 18 Python
Python中XlsxWriter模块简介与用法分析
Apr 24 Python
python utc datetime转换为时间戳的方法
Jan 15 Python
pycharm 中mark directory as exclude的用法详解
Feb 14 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
May 03 Python
Python通用唯一标识符uuid模块使用案例
Sep 10 Python
Python在后台自动解压各种压缩文件的实现方法
Nov 10 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
火影忍者:这才是千手柱间和扉间的真正死因,角都就比较搞笑了!
2020/03/10 日漫
require(),include(),require_once()和include_once()区别
2008/03/27 PHP
PHP中实现中文字符进制转换原理分析
2011/12/06 PHP
浅谈php中的循环while、do...while、for、foreach四种循环
2016/11/05 PHP
使两个iframe的高度与内容自适应,且相等
2006/11/20 Javascript
几个javascript操作word的参考代码
2009/10/26 Javascript
使用jquery实现图文切换效果另加特效
2013/01/20 Javascript
详解javascript实现瀑布流列式布局
2016/01/29 Javascript
javascript显示上周、上个月日期的处理方法
2016/02/03 Javascript
JS中的phototype详解
2017/02/04 Javascript
touch.js 拖动、缩放、旋转 (鼠标手势)功能代码
2017/02/04 Javascript
基于JavaScript实现滑动门效果
2017/03/16 Javascript
微信小程序 商城开发(ecshop )简单实例
2017/04/07 Javascript
基于JavaScript+HTML5 实现打地鼠小游戏逻辑流程图文详解(附完整代码)
2017/11/02 Javascript
nodejs使用socket5进行代理请求的实现
2020/02/21 NodeJs
JS Html转义和反转义(html编码和解码)的实现与使用方法总结
2020/03/10 Javascript
python实现zencart产品数据导入到magento(python导入数据)
2014/04/03 Python
对于Python的Django框架部署的一些建议
2015/04/09 Python
python调用API实现智能回复机器人
2018/04/10 Python
Python 多个图同时在不同窗口显示的实现方法
2019/07/07 Python
python basemap 画出经纬度并标定的实例
2019/07/09 Python
django 使用全局搜索功能的实例详解
2019/07/18 Python
使用matlab 判断两个矩阵是否相等的实例
2020/05/11 Python
详解python如何引用包package
2020/06/07 Python
Python sorted对list和dict排序
2020/06/09 Python
Windows下Sqlmap环境安装教程详解
2020/08/04 Python
纯css3实现思维导图样式示例
2018/11/01 HTML / CSS
canvas实现有递增动画的环形进度条的实现方法
2019/07/10 HTML / CSS
乐高奥地利官方商店:LEGO Shop AT
2019/07/16 全球购物
代码中finally中的代码会不会执行
2012/02/06 面试题
工程售后服务方案
2014/06/08 职场文书
三严三实学习心得体会
2014/10/13 职场文书
股权转让协议书
2014/12/07 职场文书
优秀护士事迹材料
2014/12/25 职场文书
Java实现多文件上传功能
2021/06/30 Java/Android
Python中npy和mat文件的保存与读取
2022/04/24 Python