`
ilrxx
  • 浏览: 64853 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

初学python,确实很好用!

阅读更多

这两天闲来无事,想学习下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秒,嘿嘿,速度还是不错的~~

0
0
分享到:
评论
2 楼 ilrxx 2011-02-01  
用shell没有测试过。。我可以抽空测试下
1 楼 imwade3 2011-01-31  
你用shel的需要多长时间?

相关推荐

    Python快速编程入门习题参考答案.docx

    【Python编程语言基础】 Python是一种面向对象的高级...这些习题涵盖了Python的基本语法和控制结构,是初学者巩固基础知识的好材料。通过解决这些问题,学习者可以更好地理解Python的核心概念,并提升实际编程能力。

    大学Python.学习题复习资料及答案-必收藏.pdf

    Python是一种广泛应用于各种领域的高级编程语言,尤其在教育和数据科学中...以上是Python基础知识的概览,涵盖了语言基础、数据结构、控制流、字符串操作、Turtle库的使用等多个方面,对于初学者来说是很好的复习材料。

    解决python报错MemoryError的问题

    8. 如果上述方法都不适用,或者你仍需使用32位Python且任务又确实需要超过2GB的内存,那么可能需要对算法进行重大修改,或者将任务分散到多台机器上执行。 总而言之,遇到MemoryError错误时,关键是要清楚地了解...

    Python-Thredo是异步线程是精品还是垃圾交给时间来判决

    时间确实是一个很好的裁判,如果Thredo库能在实际项目中经受住考验,得到广泛的认可和应用,那么它很可能就是有价值的工具。相反,如果问题频出,或者有更好的库出现,Thredo可能会被逐渐边缘化。 为了深入了解...

    PYTHON自然语言处理中文翻译 NLTK 中文版文字版

    这里提到的“高清文字版”可能指的是文档的质量很好,文字清晰可读,没有扫描产生的模糊不清的问题。 标签“python 自然语言处理 中文版 文字版”则是对内容的一个简要归纳,表明文档涵盖了Python编程语言和自然...

    python爬虫入门到精通必备的书籍.docx

    尽管书名有些特别,但这本书确实是很好的Python入门教材,尤其适合完全没有编程背景的读者。书中通过大量实例引导读者逐步掌握Python编程技能。 - **《深入浅出Python》** 作为HeadFirst系列的一部分,本书以...

    python guide

    - **官方文档**:官方文档中的示例代码也是很好的学习资源。 ##### 2.4 文档编写 良好的文档不仅可以帮助其他开发者理解你的代码,也能在未来帮助你自己回顾项目细节。 - **内联注释**:用于解释复杂的逻辑。 - *...

    Learning Python(4th)

    本书作为一本权威的Python教程,不仅适合Python初学者入门,也适合有一定经验的开发人员进一步深化对Python的理解和掌握。 #### 核心知识点详解 **1. 为什么人们选择使用Python?** - **软件质量:** Python以其...

    人工智能实战-从 Python 入门到机器学习.rar

    幸运的是,因为 Python 是一种得到了广泛使用的通用编程语言,加上其在科学计算和机器学习领域的应用,所以找到一个初学者教程并不十分困难。你在 Python 和编程上的经验水平对于起步而言是至关重要的。

    pythonchallenge level2官方方法集

    使用Python的简单解决方案,强调了Python语言的易学性和实用性,即使是对初学者也友好。 #### 53. Completesolution in ruby 在Ruby中完成的完整解决方案,展示了Ruby语言在处理各种编程任务时的能力和风格。 ###...

    python基于Tkinter库实现简单文本编辑器实例

    这对于初学者来说是一个很好的起点,可以帮助他们理解 GUI 应用程序的基本结构和工作原理。 此外,还可以进一步扩展此编辑器的功能,例如添加撤销/重做功能、查找和替换功能、支持多文档等。这将为学习者提供更多的...

    Python网络编程

    网络编程是一个在软件行业中非常...对于初学者来说,Python网络编程是一个很好的起点,因为Python简洁的语法和丰富的库能够降低学习的难度,使初学者能够快速地掌握网络编程的基本概念,并开发出功能丰富的网络应用。

    python-for-absolute-beginners-course:本课程的代码示例和其他讲义

    学生在说什么适用于初学者的Python确实做得很好,我拥有CodeAcademy和LinkedIn学习(不错的口碑),但是直到有了您的程序,我才真正陷入困境。 课程课程非常好。 感谢您整理这些内容。这门课程的内容是什么?有什么...

    生成数独游戏的python程序knapsack (yolov9).zip

    对于初学者来说,这样的项目是一个很好的练习,可以帮助他们理解Python编程基础,以及如何利用算法解决实际问题。 压缩包内“生成数独游戏的python程序knapsack (48).zip”可能包含以下内容: 1. Python源代码文件...

    一个能发邮件的文本编辑器

    标题中的“一个能发邮件的文本编辑器”指的是一个使用Python编程语言开发的应用程序,它具备基本的文本编辑功能,并且...对于初学者,这是一个很好的学习机会,可以加深对Python编码理解,并熟悉邮件发送的相关技术。

    Python封装了很好用的结构和方法,为啥还要学数据结构?

    在编程领域,Python确实提供了许多方便的数据结构,如列表、字典等,它们拥有丰富的内置方法,使得初学者能够快速上手并解决不少问题。然而,随着编程技能的提升和遇到更复杂问题的需求,仅仅依赖Python的基础数据...

    pipywebserv:简约的python网络服务器,仅使用python内置库使用流数据

    pipywebserv 简约的python网络服务器,仅使用python内置库使用python将流数据传输到实时图形数据。 这里有一个视频演示和简短描述: 我决定选择一些基本的python库来查看我走了多远,而不是选择各种笨拙的大型程序包...

    python实现猜数字游戏

    游戏虽然简单,但它确实是一个很好的起点,能让初学者在实践中学习Python,并为他们之后学习更高级的编程概念做好准备。此外,猜数字游戏也可以根据个人喜好进行扩展和改造,比如增加难度、扩展数字范围或者增加图形...

    给C++初学者的忠告

    - **解释**:作为一门功能强大的编程语言,C++具备高度的灵活性与控制力,但这也意味着它比其他一些现代语言(如Python或Java)更难上手。初学者在学习过程中会遇到诸多挑战,比如指针、内存管理等复杂概念。 - **...

    Python正则表达式匹配ip地址实例

    这些工具对于初学者来说是很好的学习资源,对于有经验的开发者来说,它们也是快速测试和调试正则表达式的好帮手。 通过本文的介绍,我们可以了解到Python正则表达式匹配IP地址的实例,以及re模块的使用方法。这不仅...

Global site tag (gtag.js) - Google Analytics