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网络编程之读取网站根目录实例
Sep 30 Python
理解Python中的类与实例
Apr 27 Python
举例讲解Django中数据模型访问外键值的方法
Jul 21 Python
Java多线程编程中ThreadLocal类的用法及深入
Jun 21 Python
Python 3中的yield from语法详解
Jan 18 Python
python 调用钉钉机器人的方法
Feb 20 Python
Django REST framework 分页的实现代码
Jun 19 Python
Python中生成一个指定长度的随机字符串实现示例
Nov 06 Python
在pytorch 中计算精度、回归率、F1 score等指标的实例
Jan 18 Python
Win10下配置tensorflow-gpu的详细教程(无VS2015/2017)
Jul 14 Python
pandas DataFrame.shift()函数的具体使用
May 24 Python
关于Python OS模块常用文件/目录函数详解
Jul 01 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 date函数参数详解
2006/11/27 PHP
php使用CutyCapt实现网页截图保存的方法
2016/10/03 PHP
PHP正则表达式处理函数(PCRE 函数)实例小结
2019/05/09 PHP
Jquery截取中文字符串的实现代码
2010/12/22 Javascript
Nodejs中读取中文文件编码问题、发送邮件和定时任务实例
2015/01/01 NodeJs
JQuery插入DOM节点的方法
2015/06/11 Javascript
Jquery 效果使用详解
2015/11/23 Javascript
BootStrap实现树形目录组件代码详解
2016/06/21 Javascript
JS实现简单的右下角弹出提示窗口完整实例
2016/06/21 Javascript
Vue中如何实现proxy代理
2018/04/20 Javascript
jQuery length 和 size()区别总结
2018/04/26 jQuery
详解封装基础的angular4的request请求方法
2018/06/05 Javascript
JS实现的类似微信聊天效果示例
2019/01/29 Javascript
原生js+canvas实现下雪效果
2020/08/02 Javascript
[02:06]DOTA2肉山黑名单魔法终结者 敌法师中文配音鉴赏
2013/06/17 DOTA
[00:52]黑暗之门更新 新英雄孽主驾临DOTA2
2016/08/24 DOTA
[04:42]5分钟带你了解什么是DOTA2(第一期)
2017/02/07 DOTA
[01:21]2018DOTA2亚洲邀请赛4.5采访 打DOTA2也能有女朋友?
2018/04/06 DOTA
[02:04]2020年夜魇暗潮预告片
2020/10/30 DOTA
[01:38:19]夜魇凡尔赛茶话会 第五期
2021/03/11 DOTA
在Python程序中操作MySQL的基本方法
2015/07/29 Python
Python2/3中urllib库的一些常见用法
2017/12/19 Python
python获取程序执行文件路径的方法(推荐)
2018/04/26 Python
matplotlib调整子图间距,调整整体空白的方法
2018/08/03 Python
ZABBIX3.2使用python脚本实现监控报表的方法
2019/07/02 Python
使用OpenCV实现仿射变换—平移功能
2019/08/29 Python
python基于opencv 实现图像时钟
2021/01/04 Python
解决pytorch 数据类型报错的问题
2021/03/03 Python
Otel.com:折扣酒店预订
2017/08/24 全球购物
AJax面试题
2014/11/25 面试题
《云房子》教学反思
2014/04/20 职场文书
工地例会施工汇报材料
2014/08/22 职场文书
奥巴马经典演讲稿
2014/09/13 职场文书
法定代表人授权委托书
2014/09/19 职场文书
MySQL之DML语言
2021/04/05 MySQL
Java Spring 控制反转(IOC)容器详解
2021/10/05 Java/Android