这两天闲来无事,想学习下python,于是就把自己项目中用shell写的一个统计pv的模块改成了python,速度还不错,与大家分享下。
我读的一个3.2G大小的日志文件,格式如下:
2011-01-10 10:22:48,787 INFO [view] - am=adView<|>at=2011-01-10 10:22:48<|>aditemid=27<|>adposition=2<|>auid<|>ab=100123<|>targetab=100040<|>adid=*******<|>temp1=<|>temp2=<|>ip=<|>asid<|>cid=<|>csid=<|>useract=<|>ua=iPhone Simulator/4.2<|>flat=iphone<|>version=1.0<|>sm=iPhone Simulator<|>sv=4.2<|>language=en_US<|>ack=<|>location=<|>tag=<|>serverver=1.0.0<|>md5value=******<|>timestamp=2011-01-10 02:07:32 +0000<|>reserved=reserved<|>art=2<|>acode=000000
我统计的规则是统计相同的at(日期只考虑年月日,例如2011-01-10),aditemid,adposition各出现多少次,即如果at,aditemid,adposition在日志中出现过一次就记其一次pv。
python代码如下:
#!/usr/bin/python
#coding=utf-8
import re, time, datetime
import MySQLdb
startTime = datetime.datetime.now()
print startTime
conn = MySQLdb.connect(host='localhost', user='root', passwd='root', db='test', charset='utf8')
cursor = conn.cursor()
countMap = {}
sql = "insert into ap_report(ad_date, ad_app_id, view_position, view_pv) values(%s, %s, %s, %s) on duplicate key update view_pv=%s"
for row in open("D:/my documents/view.log","r"):
s = row.split('\n')[0].split("<|>")
# 唯一key main_id, pair_id
uniqueKey = '%s,%s,%s' % (s[1].split("=")[1].split(" ")[0], s[2].split("=")[1], s[3].split("=")[1])
if not countMap.has_key(uniqueKey):
countMap[uniqueKey] = '%s,%s,%s,1' % (s[1].split("=")[1].split(" ")[0], s[2].split("=")[1], s[3].split("=")[1])
else:
ad_date, ad_app_id, view_position, view_pv = countMap[uniqueKey].split(',')
view_pv = int(view_pv) + 1
countMap[uniqueKey] = '%s,%s,%s,%s' % (ad_date, ad_app_id, view_position, view_pv)
#入库
for key in countMap.keys():
ad_date, ad_app_id, view_position, view_pv = countMap[key].split(',')
param = (ad_date, ad_app_id, view_position, view_pv, view_pv)
cursor.execute(sql, param)
conn.commit()
cursor.close()
conn.close();
endTime = datetime.datetime.now()
print endTime
print u'用时:' + str(endTime - startTime)
print 'import complete'
运行结果:我机器是酷睿2的cpu(E5500),2g内存,在运行过程中cpu使用率在30%左右,还开着不少其他东西。。
2011-01-28 18:53:09.671000
2011-01-28 18:55:15.031000
用时:0:02:05.360000
import complete
跑了2分钟05秒,嘿嘿,速度还是不错的~~
分享到:
相关推荐
【Python编程语言基础】 Python是一种面向对象的高级...这些习题涵盖了Python的基本语法和控制结构,是初学者巩固基础知识的好材料。通过解决这些问题,学习者可以更好地理解Python的核心概念,并提升实际编程能力。
Python是一种广泛应用于各种领域的高级编程语言,尤其在教育和数据科学中...以上是Python基础知识的概览,涵盖了语言基础、数据结构、控制流、字符串操作、Turtle库的使用等多个方面,对于初学者来说是很好的复习材料。
8. 如果上述方法都不适用,或者你仍需使用32位Python且任务又确实需要超过2GB的内存,那么可能需要对算法进行重大修改,或者将任务分散到多台机器上执行。 总而言之,遇到MemoryError错误时,关键是要清楚地了解...
时间确实是一个很好的裁判,如果Thredo库能在实际项目中经受住考验,得到广泛的认可和应用,那么它很可能就是有价值的工具。相反,如果问题频出,或者有更好的库出现,Thredo可能会被逐渐边缘化。 为了深入了解...
这里提到的“高清文字版”可能指的是文档的质量很好,文字清晰可读,没有扫描产生的模糊不清的问题。 标签“python 自然语言处理 中文版 文字版”则是对内容的一个简要归纳,表明文档涵盖了Python编程语言和自然...
尽管书名有些特别,但这本书确实是很好的Python入门教材,尤其适合完全没有编程背景的读者。书中通过大量实例引导读者逐步掌握Python编程技能。 - **《深入浅出Python》** 作为HeadFirst系列的一部分,本书以...
- **官方文档**:官方文档中的示例代码也是很好的学习资源。 ##### 2.4 文档编写 良好的文档不仅可以帮助其他开发者理解你的代码,也能在未来帮助你自己回顾项目细节。 - **内联注释**:用于解释复杂的逻辑。 - *...
本书作为一本权威的Python教程,不仅适合Python初学者入门,也适合有一定经验的开发人员进一步深化对Python的理解和掌握。 #### 核心知识点详解 **1. 为什么人们选择使用Python?** - **软件质量:** Python以其...
幸运的是,因为 Python 是一种得到了广泛使用的通用编程语言,加上其在科学计算和机器学习领域的应用,所以找到一个初学者教程并不十分困难。你在 Python 和编程上的经验水平对于起步而言是至关重要的。
使用Python的简单解决方案,强调了Python语言的易学性和实用性,即使是对初学者也友好。 #### 53. Completesolution in ruby 在Ruby中完成的完整解决方案,展示了Ruby语言在处理各种编程任务时的能力和风格。 ###...
这对于初学者来说是一个很好的起点,可以帮助他们理解 GUI 应用程序的基本结构和工作原理。 此外,还可以进一步扩展此编辑器的功能,例如添加撤销/重做功能、查找和替换功能、支持多文档等。这将为学习者提供更多的...
网络编程是一个在软件行业中非常...对于初学者来说,Python网络编程是一个很好的起点,因为Python简洁的语法和丰富的库能够降低学习的难度,使初学者能够快速地掌握网络编程的基本概念,并开发出功能丰富的网络应用。
学生在说什么适用于初学者的Python确实做得很好,我拥有CodeAcademy和LinkedIn学习(不错的口碑),但是直到有了您的程序,我才真正陷入困境。 课程课程非常好。 感谢您整理这些内容。这门课程的内容是什么?有什么...
对于初学者来说,这样的项目是一个很好的练习,可以帮助他们理解Python编程基础,以及如何利用算法解决实际问题。 压缩包内“生成数独游戏的python程序knapsack (48).zip”可能包含以下内容: 1. Python源代码文件...
标题中的“一个能发邮件的文本编辑器”指的是一个使用Python编程语言开发的应用程序,它具备基本的文本编辑功能,并且...对于初学者,这是一个很好的学习机会,可以加深对Python编码理解,并熟悉邮件发送的相关技术。
在编程领域,Python确实提供了许多方便的数据结构,如列表、字典等,它们拥有丰富的内置方法,使得初学者能够快速上手并解决不少问题。然而,随着编程技能的提升和遇到更复杂问题的需求,仅仅依赖Python的基础数据...
pipywebserv 简约的python网络服务器,仅使用python内置库使用python将流数据传输到实时图形数据。 这里有一个视频演示和简短描述: 我决定选择一些基本的python库来查看我走了多远,而不是选择各种笨拙的大型程序包...
游戏虽然简单,但它确实是一个很好的起点,能让初学者在实践中学习Python,并为他们之后学习更高级的编程概念做好准备。此外,猜数字游戏也可以根据个人喜好进行扩展和改造,比如增加难度、扩展数字范围或者增加图形...
- **解释**:作为一门功能强大的编程语言,C++具备高度的灵活性与控制力,但这也意味着它比其他一些现代语言(如Python或Java)更难上手。初学者在学习过程中会遇到诸多挑战,比如指针、内存管理等复杂概念。 - **...
这些工具对于初学者来说是很好的学习资源,对于有经验的开发者来说,它们也是快速测试和调试正则表达式的好帮手。 通过本文的介绍,我们可以了解到Python正则表达式匹配IP地址的实例,以及re模块的使用方法。这不仅...