python 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




转载于:https://my.oschina.net/davehe/blog/127254

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值