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读取和处理文件后缀为.sqlite的数据文件(实例讲解)
Jun 27 Python
Python 多核并行计算的示例代码
Nov 07 Python
python3利用smtplib通过qq邮箱发送邮件方法示例
Dec 03 Python
TensorFlow如何实现反向传播
Feb 06 Python
Python在for循环中更改list值的方法【推荐】
Aug 17 Python
Python之两种模式的生产者消费者模型详解
Oct 26 Python
Python基于Logistic回归建模计算某银行在降低贷款拖欠率的数据示例
Jan 23 Python
Python常见数据类型转换操作示例
May 08 Python
关于Python 中的时间处理包datetime和arrow的方法详解
Mar 19 Python
Java爬虫技术框架之Heritrix框架详解
Jul 22 Python
Python编写nmap扫描工具
Jul 21 Python
Python使用plt.boxplot()函数绘制箱图、常用方法以及含义详解
Aug 14 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
解析Extjs与php数据交互(增删查改)
2013/06/25 PHP
打造基于jQuery的高性能TreeView(asp.net)
2011/02/23 Javascript
Nodejs sublime text 3安装与配置
2014/06/19 NodeJs
js delete 用法(删除对象属性及变量)
2014/08/24 Javascript
NodeJS中Buffer模块详解
2015/01/07 NodeJs
EasyUi datagrid 实现表格分页
2015/02/10 Javascript
Node.js 实现简单的接口服务器的实例代码
2017/05/23 Javascript
微信小程序实战篇之购物车的实现代码示例
2017/11/30 Javascript
基于vue监听滚动事件实现锚点链接平滑滚动的方法
2018/01/17 Javascript
JS简单实现动态添加HTML标记的方法示例
2018/04/08 Javascript
JS+canvas画布实现炫酷的旋转星空效果示例
2019/02/13 Javascript
jQuery实现提交表单时不提交隐藏div中input的方法
2019/10/08 jQuery
python中的函数用法入门教程
2014/09/02 Python
详解Python命令行解析工具Argparse
2016/04/20 Python
利用python爬取散文网的文章实例教程
2017/06/18 Python
python通过socket实现多个连接并实现ssh功能详解
2017/11/08 Python
Python使用Phantomjs截屏网页的方法
2018/05/17 Python
对Tensorflow中的变量初始化函数详解
2018/07/27 Python
python之线程通过信号pyqtSignal刷新ui的方法
2019/01/11 Python
用Python中的turtle模块画图两只小羊方法
2019/04/09 Python
python实现最小二乘法线性拟合
2019/07/19 Python
Pytorch卷积层手动初始化权值的实例
2019/08/17 Python
python3.6生成器yield用法实例分析
2019/08/23 Python
tensorflow tf.train.batch之数据批量读取方式
2020/01/20 Python
python实现数字炸弹游戏程序
2020/07/17 Python
HTML5新增的表单元素和属性实例解析
2014/07/07 HTML / CSS
cf收人广告词大全
2014/03/14 职场文书
弘扬职业精神演讲稿
2014/03/20 职场文书
国庆节促销广告语2014
2014/09/19 职场文书
2015年感恩父亲节活动策划方案
2015/05/05 职场文书
心术观后感
2015/06/11 职场文书
先进工作者主要事迹材料
2015/11/03 职场文书
OpenCV-Python实现怀旧滤镜与连环画滤镜
2021/06/09 Python
MySQL基于索引的压力测试的实现
2021/11/07 MySQL
Kubernetes关键组件与结构组成介绍
2022/03/31 Servers
Mysql排查分析慢sql之explain实战案例
2022/04/19 MySQL