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网络编程学习笔记(五):socket的一些补充
Jun 09 Python
Python的网络编程库Gevent的安装及使用技巧
Jun 24 Python
30秒轻松实现TensorFlow物体检测
Mar 14 Python
python正则表达式之对号入座篇
Jul 24 Python
python统计中文字符数量的两种方法
Jan 31 Python
Python 保持登录状态进行接口测试的方法示例
Aug 06 Python
python操作gitlab API过程解析
Dec 27 Python
python 装饰器功能与用法案例详解
Mar 06 Python
django admin 添加自定义链接方式
Mar 11 Python
python不相等的两个字符串的 if 条件判断为True详解
Mar 12 Python
python 制作python包,封装成可用模块教程
Jul 13 Python
Python中22个万用公式的小结
Jul 21 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中删除变量时unset()和null的区别分析
2011/01/27 PHP
Session保存到数据库的php类分享
2011/10/24 PHP
PHP 第二节 数据类型之转换
2012/04/28 PHP
ThinkPHP中ajax使用实例教程
2014/08/22 PHP
深入分析PHP引用(&)
2014/09/04 PHP
PHP连接数据库实现注册页面的增删改查操作
2016/03/27 PHP
php校验公钥是否可用的实例方法
2019/09/17 PHP
Thinkphp 框架基础之入口文件功能、定义与用法分析
2020/04/27 PHP
Jquery弹出窗口插件 LeanModal的使用方法
2012/03/10 Javascript
jquery实现多级下拉菜单的实例代码
2013/10/02 Javascript
详解jQuery插件开发中的extend方法
2013/11/19 Javascript
JS操作iframe里的dom(实例讲解)
2014/01/29 Javascript
jQuery选择器querySelector的使用指南
2015/01/23 Javascript
jQuery插件zepto.js简单实现tab切换
2015/06/16 Javascript
Jquery easyui 实现动态树
2015/11/17 Javascript
js 动态给元素添加、移除事件的实现方法
2016/07/19 Javascript
TypeScript学习之强制类型的转换
2016/12/27 Javascript
JavaScript求一组数的最小公倍数和最大公约数常用算法详解【面向对象,回归迭代和循环】
2018/05/07 Javascript
vue.js+element-ui动态配置菜单的实例
2018/09/07 Javascript
Layui多选只有最后一个值的解决方法
2019/09/02 Javascript
Bootstrap table 服务器端分页功能实现方法示例
2020/06/01 Javascript
Linux RedHat下安装Python2.7开发环境
2017/05/20 Python
matplotlib简介,安装和简单实例代码
2017/12/26 Python
Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解
2019/02/28 Python
几个适合python初学者的简单小程序,看完受益匪浅!(推荐)
2019/04/16 Python
python-Web-flask-视图内容和模板知识点西宁街
2019/08/23 Python
python xlwt如何设置单元格的自定义背景颜色
2019/09/03 Python
python如何使用Redis构建分布式锁
2020/01/16 Python
css3实例教程 一款纯css3实现的发光屏幕旋转特效
2014/12/07 HTML / CSS
美国全球旅游运营商:Pacific Holidays
2018/06/18 全球购物
Java的基础面试题附答案
2016/01/10 面试题
高中美术教学反思
2014/01/19 职场文书
商场消防演习方案
2014/02/12 职场文书
毕业设计指导教师评语
2014/12/30 职场文书
红歌会主持词
2015/07/02 职场文书
Sentry的安装、配置、使用教程(Sentry日志手机系统)
2022/07/23 Python