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