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 过滤字符串的技巧,map与itertools.imap
Sep 06 Python
python写xml文件的操作实例
Oct 05 Python
Python实现Windows上气泡提醒效果的方法
Jun 03 Python
Python流程控制 while循环实现解析
Sep 02 Python
Python中Subprocess的不同函数解析
Dec 10 Python
Python函数基本使用原理详解
Mar 19 Python
Python xlrd模块导入过程及常用操作
Jun 10 Python
Python实现Keras搭建神经网络训练分类模型教程
Jun 12 Python
如何利用Python动态模拟太阳系运转
Sep 04 Python
聊聊python中的循环遍历
Sep 07 Python
python图片合成的示例
Nov 09 Python
python中threading和queue库实现多线程编程
Feb 06 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
ASP知识讲座四
2006/10/09 PHP
解决163/sohu/sina不能够收到PHP MAIL函数发出邮件的问题
2009/03/13 PHP
php array_search() 函数使用
2010/04/13 PHP
php 操作符与控制结构
2012/03/07 PHP
解析ajax事件的调用顺序
2013/06/17 PHP
php实现判断访问来路是否为搜索引擎机器人的方法
2015/04/15 PHP
Laravel4中的Validator验证扩展用法详解
2016/07/26 PHP
PHP实现大数(浮点数)取余的方法
2017/02/18 PHP
关于IE、Firefox、Opera页面呈现异同 写脚本很痛苦
2009/08/28 Javascript
异步javascript的原理和实现技巧介绍
2012/11/08 Javascript
让页面上两个div中的滚动条(滑块)同步运动示例
2013/08/07 Javascript
js数组循环遍历数组内所有元素的方法
2014/01/18 Javascript
DOM基础教程之使用DOM设置文本框
2015/01/20 Javascript
jquery中trigger()无法触发hover事件的解决方法
2015/05/07 Javascript
Node.js获取前端ajax提交的request信息
2017/02/20 Javascript
原生JS封装animate运动框架的实例
2017/10/12 Javascript
Node.js中的cluster模块深入解读
2018/06/11 Javascript
vue-cli中vue本地实现跨域调试接口
2019/01/16 Javascript
ES6的异步终极解决方案分享
2019/07/11 Javascript
Windows上node.js的多版本管理工具用法实例分析
2019/11/06 Javascript
在vue-cli中引入lodash.js并使用详解
2019/11/13 Javascript
wepy--用vantUI 实现上弹列表并选择相应的值操作
2020/11/03 Javascript
python获取文件版本信息、公司名和产品名的方法
2014/10/05 Python
python实现端口转发器的方法
2015/03/13 Python
Python爬虫:通过关键字爬取百度图片
2017/02/17 Python
python 判断是否为正小数和正整数的实例
2017/07/23 Python
pytorch加载自定义网络权重的实现
2020/01/07 Python
python装饰器实现对异常代码出现进行自动监控的实现方法
2020/09/15 Python
志愿者服务感言
2014/02/27 职场文书
学习两会精神心得范文
2014/03/17 职场文书
2014年大学班长工作总结
2014/11/14 职场文书
公司仓管员岗位职责
2015/04/01 职场文书
实习证明模板
2015/06/16 职场文书
呼兰河传读书笔记
2015/06/30 职场文书
教师法制教育培训学习心得体会
2016/01/14 职场文书
Pytest中skip和skipif的具体使用方法
2021/06/30 Python