• 为了保证你在浏览本网站时有着更好的体验,建议使用类似Chrome、Firefox之类的浏览器~~
    • 如果你喜欢本站的内容何不Ctrl+D收藏一下呢,与大家一起分享各种编程知识~
    • 本网站研究机器学习、计算机视觉、模式识别~当然不局限于此,生命在于折腾,何不年轻时多折腾一下

Python—fileinput操作

Python admin 3年前 (2015-06-03) 799次浏览 0个评论 扫描二维码

这几天有这样一个需求,要将用户登陆系统的信息统计出来,做成一个报表。当用户登陆成功的时候,服务器会往日志文件里写一条像下面这种格式的记录:”日期时间@用户名@IP“,这样的日志文件第天生成一个。所以,我们只要编历这些日志文件,将所有的登陆信息提取出来,并重新组织数据格式就可以了。用 python 写一个分析工具非常简单,你会说,用 glob 获取所有的日志文件,然后对每个日志文件都 open(logfile),再一行一行的读取;或者用 os.walk,也很简单。其实,标准库提供了另一个辅助模块,我们可以非常方便的完成这个工作,那就是 fileinput。下面我们就通过 fileinput 来编历所有的 D 盘下的文本文件,将每一行的长度打印出来:

1
2
3
4
5
6
7
import fileinput
from glob import glob
for line in fileinput.input(glob(r'd:/*.txt')):
    print fileinput.lineno(), u'文件:', fileinput.filename(), /
            u'行号:', fileinput.filelineno(), u'长度:', len(line.strip('/n'))
fileinput.close()

代码非常简单明了。input()接受要编历的所有文件路径的列表,通过 filename()返回当前正在读取的文件的文件名,filelineno()返回当前读取的行的行号,而 lineno()返回当前已经读取的行的数量(或者序号)。其实,模块内部通过 FileInput 类来实现文件的编历读取,input()在内部创建了该类的一个对象,当处理完数据行之后,通过 fileinput.close()来关闭这个内部对象。

模块非常简单,详细的内容可以参数标准库手册。


Deeplearn, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Python—fileinput 操作
喜欢 (0)
admin
关于作者:

您必须 登录 才能发表评论!