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 help()函数用法详解
Mar 11 Python
python根据出生年份简单计算生肖的方法
Mar 27 Python
详解Python如何生成词云的方法
Jun 01 Python
详解Python 数据库的Connection、Cursor两大对象
Jun 25 Python
Python数据分析matplotlib设置多个子图的间距方法
Aug 03 Python
浅谈Python的条件判断语句if/else语句
Mar 21 Python
python基于socket实现的UDP及TCP通讯功能示例
Nov 01 Python
django框架单表操作之增删改实例分析
Dec 16 Python
pandas to_excel 添加颜色操作
Jul 14 Python
如何用python实现一个HTTP连接池
Jan 14 Python
python用海龟绘图写贪吃蛇游戏
Jun 18 Python
基于PyQT5制作一个桌面摸鱼工具
Feb 15 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
在html文件中也可以执行php语句的方法
2015/04/09 PHP
客户端js判断文件类型和文件大小即限制上传大小
2013/11/20 Javascript
js在输入框屏蔽按键,只能键入数字的示例代码
2014/01/03 Javascript
JavaScript实现简单图片滚动附源码下载
2014/06/17 Javascript
jquery 表单验证之通过 class验证表单不为空
2015/11/02 Javascript
简单讲解jQuery中的子元素过滤选择器
2016/04/18 Javascript
JavaScript高仿支付宝倒计时页面及代码实现
2016/10/21 Javascript
jquery+css3问卷答题卡翻页动画效果示例
2016/10/26 Javascript
Bootstrap实现导航栏的2种方式
2016/11/28 Javascript
jquery操作ID带有变量的节点实例
2016/12/07 Javascript
JavaScript之json_动力节点Java学院整理
2017/06/29 Javascript
vue 将页面公用的头部组件化的方法
2017/12/18 Javascript
vue的一个分页组件的示例代码
2017/12/25 Javascript
JavaScript ES2019中的8个新特性详解
2019/02/20 Javascript
vue中$refs, $emit, $on, $once, $off的使用详解
2019/05/26 Javascript
Java 生成随机字符的示例代码
2021/01/13 Javascript
[51:17]Mski vs VGJ.S Supermajor小组赛C组 BO3 第三场 6.3
2018/06/04 DOTA
python中使用序列的方法
2015/08/03 Python
Python双精度浮点数运算并分行显示操作示例
2017/07/21 Python
浅谈python函数调用返回两个或多个变量的方法
2019/01/23 Python
python 动态调用函数实例解析
2019/10/21 Python
使用Tensorflow将自己的数据分割成batch训练实例
2020/01/20 Python
Python如何获取文件指定行的内容
2020/05/27 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
2020/08/07 Python
利用SVG和CSS3来实现一个炫酷的边框动画
2015/07/22 HTML / CSS
html5嵌入内容_动力节点Java学院整理
2017/07/07 HTML / CSS
canvas学习总结三之绘制路径-线段
2019/01/31 HTML / CSS
锐步英国官网:Reebok英国
2019/11/29 全球购物
eBay荷兰购物网站:eBay.nl
2020/06/26 全球购物
店面销售职位的职责
2014/03/09 职场文书
毕业留言寄语大全
2014/04/10 职场文书
化学专业自荐信
2014/05/28 职场文书
运动会广播稿50字
2015/08/19 职场文书
高一英语教学反思
2016/03/03 职场文书
MySQL 如何设计统计数据表
2021/06/15 MySQL
关于Redis的主从复制及哨兵问题
2022/06/16 Redis