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 28 Python
python list排序的两种方法及实例讲解
Mar 20 Python
Django中login_required装饰器的深入介绍
Nov 24 Python
Python检查和同步本地时间(北京时间)的实现方法
Dec 03 Python
python flask中动态URL规则详解
Nov 22 Python
Python 基于FIR实现Hilbert滤波器求信号包络详解
Feb 26 Python
python使用gdal对shp读取,新建和更新的实例
Mar 10 Python
解决python使用list()时总是报错的问题
May 05 Python
Python代码中如何读取键盘录入的值
May 27 Python
彻底解决Python包下载慢问题
Nov 15 Python
教你一分钟在win10终端成功安装Pytorch的方法步骤
Jan 28 Python
Pytorch中使用ImageFolder读取数据集时忽略特定文件
Mar 23 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 CodeBase:将时间显示为"刚刚""n分钟/小时前"的方法详解
2013/06/06 PHP
php常用字符串比较函数实例汇总
2014/11/24 PHP
extjs3 combobox取value和text案例详解
2013/02/06 Javascript
在jquery中的ajax方法怎样通过JSONP进行远程调用
2014/04/04 Javascript
JS实现文字链接感应鼠标淡入淡出改变颜色的方法
2015/02/26 Javascript
实例剖析AngularJS框架中数据的双向绑定运用
2016/03/04 Javascript
js创建jsonArray传输至后台及后台全面解析
2016/04/11 Javascript
js控制文本框禁止输入特殊字符详解
2017/04/07 Javascript
JS判断微信扫码的方法
2017/08/07 Javascript
详解jQuery同步Ajax带来的UI线程阻塞问题及解决办法
2017/08/09 jQuery
JS和JQuery实现雪花飘落效果
2017/11/30 jQuery
Angular4学习教程之DOM属性绑定详解
2018/01/04 Javascript
bootstrap动态调用select下拉框的实例代码
2018/08/09 Javascript
vue 本地服务不能被外部IP访问的完美解决方法
2018/10/29 Javascript
vue 左滑删除功能的示例代码
2019/01/28 Javascript
vue路由对不同界面进行传参及跳转的总结
2019/04/20 Javascript
nodejs中实现用户注册路由功能
2019/05/20 NodeJs
基于JS实现简单滑块拼图游戏
2019/10/12 Javascript
vue实现拖拽效果
2019/12/23 Javascript
js实现翻牌小游戏
2020/07/31 Javascript
[01:41]DOTA2 2015国际邀请赛中国区预选赛第三日战报
2015/05/28 DOTA
[01:13:08]2018DOTA2亚洲邀请赛4.6 淘汰赛 mineski vs LGD 第二场
2018/04/10 DOTA
[01:30]我们共输赢 完美世界城市挑战赛开启全新赛季
2019/04/19 DOTA
pymongo实现多结果进行多列排序的方法
2015/05/16 Python
深入解答关于Python的11道基本面试题
2017/04/01 Python
python批量下载网站马拉松照片的完整步骤
2018/12/05 Python
Python序列类型的打包和解包实例
2019/12/21 Python
python 递归调用返回None的问题及解决方法
2020/03/16 Python
Perricone MD裴礼康美国官网:抗衰老护肤品
2016/09/26 全球购物
几道PHP的面试题
2012/05/19 面试题
this关键字的含义
2015/04/08 面试题
大学军训感言600字
2014/02/25 职场文书
教堂婚礼主持词
2014/03/14 职场文书
篮球比赛通讯稿
2015/07/18 职场文书
html+css实现滚动到元素位置显示加载动画效果
2021/08/02 HTML / CSS
Java时间工具类Date的常用处理方法
2022/05/25 Java/Android