技术标签: java perl python 文本处理
下面是我的Perl和Python脚本,它可以对大约21个日志文件执行一些简单的文本处理,每个文件大约300 KB到1 MB(最大值)x 5次重复(总共125个文件,因为log重复了5次)。
Python代码(修改为使用编译的re和使用re.I的代码)#!/usr/bin/python
import re
import fileinput
exists_re = re.compile(r'^(.*?) INFO.*Such a record already exists', re.I)
location_re = re.compile(r'^AwbLocation (.*?) insert into', re.I)
for line in fileinput.input():
fn = fileinput.filename()
currline = line.rstrip()
mprev = exists_re.search(currline)
if(mprev):
xlogtime = mprev.group(1)
mcurr = location_re.search(currline)
if(mcurr):
print fn, xlogtime, mcurr.group(1)
Perl代码#!/usr/bin/perl
while (<>) {
chomp;
if (m/^(.*?) INFO.*Such a record already exists/i) {
$xlogtime = $1;
}
if (m/^AwbLocation (.*?) insert into/i) {
print "$ARGV $xlogtime $1\n";
}
}
而且,在我的电脑上,两个代码生成的10790行结果文件完全相同。这里是Cygwin的Perl和Python实现的计时。[email protected] /cygdrive/d/tmp/Clipboard
# time /tmp/scripts/python/afs/process_file.py *log* *log* *log* *log* *log* >
summarypy.log
real 0m8.185s
user 0m8.018s
sys 0m0.092s
[email protected] /cygdrive/d/tmp/Clipboard
# time /tmp/scripts/python/afs/process_file.pl *log* *log* *log* *log* *log* >
summarypl.log
real 0m1.481s
user 0m1.294s
sys 0m0.124s
最初,使用Python需要10.2秒,使用Perl进行简单的文本处理只需要1.9秒。
(UPDATE)但是,在Python的编译版本之后,Python现在需要8.2秒,Perl需要1.5秒。Perl仍然要快得多。
有没有办法提高Python的速度,或者很明显Perl将是简单文本处理的快速方法。
顺便说一句,这不是我对简单文本处理所做的唯一测试。。。而且,我制作源代码的每一种不同方法,总是Perl以很大的优势胜出。而且,Python在简单的m/regex/匹配和打印方面的表现也从未如此出色。Please do not suggest to use C, C++, Assembly, other flavours of
Python, etc.
I am looking for a solution using Standard Python with its built-in
modules compared against Standard Perl (not even using the modules).
Boy, I wish to use Python for all my tasks due to its readability, but
to give up speed, I don't think so.
So, please suggest how can the code be improved to have comparable
results with Perl.
更新:2012-10-18
正如其他用户所建议的,Perl有它的位置,Python有它的位置。
因此,对于这个问题,我们可以安全地得出这样的结论:对于成百上千个文本文件的每一行上的简单正则表达式匹配,并将结果写入文件(或打印到屏幕上),Perl将始终在这项工作的性能上获胜。就这么简单。
请注意,当我说Perl在性能上获胜时。。。只比较了标准Perl和Python。。。不诉诸于一些模糊的模块(对于像我这样的普通用户来说是晦涩的),也不从Python或Perl调用C、C++、汇编库。我们没有时间学习所有这些额外的步骤和简单的文本匹配工作的安装。
因此,Perl支持文本处理和regex。
Python在其他地方也有自己的地位。
更新2013-05-29:做类似比较的优秀文章is here。Perl再次赢得了简单文本匹配。。。更多细节,请阅读文章。
MySQL下载我选择下载的是MySQL8.0.20的comunity版本,也就是社区版本,是免费的开源版本。MySQL官网下载地址进入下载官网选择操作系统,这里有三个下载链接,后两个分别是两个压缩包,这里我选择下载MSI这里有两个安装包,上面一个是在线安装包,我选择的是下面一个,即离线安装包不需要注册和登录,直接下载即可,下载到桌面安装双击安装包,开始运行安装程序1、选择安装类型(Choosing a Setup Type)MySQL安装时可以选择5个安装类型,每个类型所安装的
webgl_interactive_cubes.html<!DOCTYPE html><html lang="en"> <head> <title>three.js webgl - map controls</title> <meta charset="utf-8"> <meta name="vie...
RabbitMQ 一二事&lpar;5&rpar; - 通配符模式应用之前的路由模式是通过key相等来匹配 而通配符,顾名思义,符合条件,则进行消息匹配发送 将路由键和某模式进行匹配.此时队列需要绑定要一个模式上. 符号“#”匹配一个或多个词,符号“*”匹配不多不少一个 ...C 记录为什么调用 sqrt 函数报错显示未定义 一.调用此函数时,要先引用头文件:#include 二....
一、单项选择题(30道小题,共60分)1、下面关于计算机病毒说法正确的是( )。(2分)A、都具有破坏性B、有些病毒无破坏性C、都破坏EXE文件D、不破坏数据,只破坏文件2、Excel中的电子工作表具有( )。(2分)A、一维结构B、二维结构C、三维结构D、树结构3、计算机病毒通常隐藏在( )中。(2分)A、内存B、外存C、传输介质D、网络4、在Word中,创建表格不应该使用的方法是( )(2分)...
参考http://gityuan.com/2019/04/06/android-anr/http://gityuan.com/2017/01/01/input-anr/整体架构触摸屏幕的时候,Linux内核往设备节点写数据EventHub会监听设备节点文件InputReader无限循环,从EventHub中读取事件,加工后把事件放入InputDispatcher队列In...
Python 资源大全中文版我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理。awesome-python 是 vinta 发起维护的 Python 资源列表,内容包括:Web 框架、网络爬虫、网络内容提取、模板引擎、数据库、数据可视化、图片处理、文本处理、自然语言处理、机器学习、日志、代码分析等。由伯乐在线持续更新。Awesome 系列虽然挺全,...
文章首发于微信公众号:AlgorithmDeveloper,专注机器学习与Python,编程与算法,还有生活。1.前言「决策树」| Part2—Python实现之构建决策树中我们已经可以基于给定数据集训练出决策树模型,只不过是以字典方式表示决策树,决策树直观、易于理解的优点完全体现不出来。因此,这篇文章的目的就是将训练出的决策树模型以树状图形表示。给定数据集:字典形式决策树模型:{'人品': {'...
1.下载package包,有用的只有前两个。2.解压 masm 压缩文件,我把它解压到D盘。3.双击 图1 中的 DOXBox 0.74.exe 进行安装。4.打开 DOXBox0.74 (参考上一篇随笔,可修改窗口大小)5.在窗口里输入 mount d: d:\masm (第一个 d: 意思是 创建虚拟盘d)(第二个 d:\masm 是解压masm的路径) ...
HttpClient连接池管理器public class HttpClientConnection { private static PoolingHttpClientConnectionManager manager; static { SSLContextBuilder builder = new SSLContextBuilder(); try { builder.loadTrustMaterial(null, new Tr
Q1URL using bad/illegal format or missing URLA1地址写错了,含有空格 Q2 在安卓包中热更资源,出现无法打开之类的提示,是因为ftp服务器的配置问题,可参考该网页 http://blog.51cto.com/shuxiayeshou/2130970 某些在windows平台里面,路径URL,斜杠必须得3...
今天给我们自己的发布系统增加一个新建分支的功能,操作比较简单,但是使用php执行shell命令的时候总是无法push分支到远程,但是登陆服务器执行却是可以的新建分支命令如下gitfetch--allgitcheckout-bpmt_20160624_v10.7.4origin/mastergitpushoriginpmt_20160624_v10.7.4:pmt_2016062...
App架构设计经验谈:接口的设计App架构设计经验谈:技术选型App架构设计经验谈:数据层的设计App架构设计经验谈:业务层的设计App架构设计经验谈:展示层的设计:接口的设计