心随所致,梦想为开。Follow the Dreams & Heart.
| Print article | This entry was posted by hamo on 2007-05-28 at 17:40, and is filed under 读书学习. Follow any responses to this post through RSS 2.0. You can leave a response or trackback from your own site. |
No comments yet.
No trackbacks yet.
用Python写东西的笔记
about 1 month ago - No comments
自从最近这次换工作以后,空闲时间一下子变得奢侈起来,博客最近也写得少了,一些喜欢的小东西也无暇顾及。 ——————无聊分割线————————- 一直对python很钟情,不过最近很少用,能记得比较完整的程序就是“用Python做了个Spider”,当时在一个Linode的VPS上跑了几个月。最近处理数据时候又重新用python来做,做完之后还是继续感慨它的便利性。 用python的一个最大的优点就是可以快速的迭代式开发,不断的重构,这一点在这次体会尤深。 其中有几次跳跃式的重构如下: 第一次的重构在书写了几个数据段的解析函数之后,决定定制一个规则,然后通过解析规则来处理各种字段。于是有了一个大约20条记录的标签库(后来再加一个文件解析的时候又增加了6行),然后就处理了近30种数据段,而且可以很方便的定制扩充。 第二次重构在输出报告的完成了一个数据段的汇总后,抽象出了一个Report类,完全控制报告的输出。也就有了后来用css+html的报告时候的顺理成章。 另外一次不大的重构,在于利用的简化的有限状态自动机的思想来处理各种特殊情况。当然只是思想而不是一个完整的自动机。 这一条在N年前给sudidi同学的abaqus数据文件提取工具中就大体考虑过,可以说轻车熟路。 后来用配置文件来设置参数,打包exe。从开始学习到成功,大约花了30分钟,代码10行,我爱python。 除去一些修饰性的代码和css样式表,核心代码不到500行。如果用c++的话,代码量至少要翻2倍,时间2倍不止。 Eclipse+PyDev是目前开发python程序的不二选择,除去log外,一个完善的Debug环境还是很赞的。 ——————无聊分割线2——————– 有些东西记下来权当笔记,免得以后再找。 1. 文件路径的相关处理 用 os.path 就完全解决所有问题,包括路径拼接、路径拆分、相对路径提取、文件存在性判断、文件遍历、递归遍历等等。相关函数有: os.path.join os.path.basename os.path.exists os.makedirs os.path.isdir os.path.splitext 2. 文件的遍历 目录下的文件遍历有两种,一种是os.listdir,一种是用os.walk。如果需要递归,则后者更为方便。 1: files = os.listdir(proj_dir) 2: for f in files: 3: filepath = os.path.join(proj_dir,f) 4: if os.path.isdir(filepath): continue 5: if f.find(‘—-’)>-1: 6: shutil.copy(filepath, self.REPORT_DETAIL_DIR) 使用os.walk则很容易进行遍历: 1: for root,dirs,files…
Python中获取Javascript渲染后的HTML源码
about 2 years ago - 4 comments
Get Rendered HTML Source In Python 前因: 现在的网页越来越动态和漂亮,大量地用到了Javascript,包括但是不限于Ajax,这样一来直接查看网页源代码的话的,获取到的并不是真正的渲染完成后的页面。这对采集来说,是一个很大的挑战。 在火车头当中,对于Ajax获取的数据的话,可以手动分析页面提取的Ajax的处理url,然后来提取。但是对于复杂的session验证(特别是.NET的网站来说)处理比较困难。 另外一方面,对于javascript生成的页面,火车头也没法直接提取。 思路: 首先明确的是必须获取Javascript渲染结束后的结果。这一点是明确的,具体就是方法就因人而异。 而自己解决Javascript渲染无异于痴人说梦,所以必须借助现有的浏览器核心,比如Gecko、WebKit、IE。如果用Java开发的话可以Jrec这个库,它封装了Gecko。如果其他的语言,而且是在windows平台上的话,最简单的就是用—— COM,用Internet Explorer 提供的com组件。 解决方案: 突破了这层关系,下面的就水到渠成了。 在python下,对IE封装的比较完善而且文档齐全的就是PAMIE(http://sourceforge.net/projects/pamie),它的本意是作为自动化测试工具使用的。 需要注意的是,在页面加载完之后需要留出一定时间来让页面的js代码执行渲染完成后再提取html代码。这个时间需要通过试验确定。 需要注意的是: 前面所述的利用PAMIE来获取渲染后的html内容的方法是可行的,但是缺点是效率非常低。对于最常见的ajax动态内容页面来说,最直接的方法还是构造ajax请求,来获取相应内容。这样效率很高,而且返回数据都是结构化的xml或者json数据,比html更容易处理。
用Python做了个Spider
about 2 years ago - 4 comments
前因: 前些天为TAR写了一个Python的接口插件tar_pytar后,对python的兴致很高。 本博上面最火的文章就是“开源的火车头采集-Wordpress2.7.1免登录发布接口”,看来大家利用采集做垃圾站的热情也很好。 著名的火车头采集器LocoySpider也出2009版了,解决了.Net 3.5不兼容问题,而且采集标签进行了语法高亮。很好很强大。但是免费版不支持任意附件下载功能… 想下载点资料,但是论坛里面一个一个点击太烦… 于是: 自己做一个吧,python做这个肯定很合适,与火车头的功能做个对比: 说明: 私人玩具,无意公开。
为TAR写了一个Python的接口插件tar_pytar
about 2 years ago - 2 comments
TAR(Type And Run)是我一直以来所用的快速启动软件,最喜欢的是它那个快捷键呼出的超级简洁的命令行,而且TAR支持自动提取系统中已经注册的别名,比如excel就可以打开excel,mspaint打开画图。另外TAR支持插件,最常用的就是tar_math,可以对输入命令行的计算式进行计算,给出结果。 当然tar_math也存在缺点,那就是对大整数不支持,而且函数也不够丰富。另外还想增加一个查字典的功能。于是决定给TAR做个插件,取名叫tar_pytar。tar_pytar不只是个插件,而是一个python的接口插件。有了这个插件之后,就可以直接用python给TAR增加功能,而不是重新编译。 官方网站上有插件接口文件找不到了,于是给作者-=GaLaN=-发邮件要来了接口。TAR是拿Delphi写的,不过没关系。 时间紧张,只说明一下tar_pytar通过python接口提供的功能: 完整的math功能,完全可以取代tar_math。因为背后是python嘛。 词典功能,输入查询的英文单词,可以返回中文解释。(从dict.cn查询,同样感谢python的强大) 以后: 作为一个工作的中心,就是一些人对待emacs/tc的态度。
非常棒的Python入门书-Dive Into Python
about 4 years ago - No comments
在学习过Python Tutorial,有了基本一点概念之后,阅读Dive Into Python无疑是非常合适的。 Dive Into Python是一本免费的图书,可以在线阅读或者下载回来离线阅读,目前有英文、中文等多种语言版本。 这本书非常类似 Head First Design Patterns的写作风格,以几个简单但是非常有代表性的例子,深入浅出的讲解Python的概念和思想。
Trac与Apache的集成(ModPython)
about 4 years ago - 4 comments
在”Trac+SVN的安装与配置(tracd模式)“中介绍了以tracd方式的trac服务器的安装与配置,今天来研究一下Trac通过ModPython来与Apache的集成。 与tracd的方式相比,和Apache的集成有很多优点,比如充分利用apache的强大功能以及ModPython的高效率,便于管理与控制,很方便支持ssl等等。 1. 下载并安装程序 假设已经按照”Trac+SVN的安装与配置(tracd模式)“中的说明安装好了Trac。如果没有请参考安装 Apache-2.0.59:如果选择2.2,注意下面的ModPython的版本要对应 ModPython-3.3.1:这里注意选择与apache和python对应的版本,安装过程中会要求选择apache的安装目录,并且自动把mod_python.so复制到modules目录 2. 配置 配置ModPython 在apache的httpd.conf中加入下面一行: LoadModule python_module modules/mod_python.so 配置trac 在apache的httpd.conf中加入下面内容: <Location /trac> SetHandler mod_python PythonHandler trac.web.modpython_frontend PythonOption TracEnv F:\trac\proj1 PythonOption TracUriRoot /trac </Location> 然后就通过http://localhost/trac来访问 3. 下一步工作 配置Authentication 参考资料: Trac官方:TracModPython
Trac+SVN的安装与配置(tracd模式)
about 4 years ago - 1 comment
Trac最大的优点是其与wiki的集成,并且非常方便地与svn进行集成,而且是用python开发的,非常令人兴奋。 如果是在windows下安装的话,python的版本最好选择2.4。有一些模块于python25并不兼容。如果是在linux下安装,则可以安装最新的版本。 安装与配置都非常简单,下载完程序并依次安装完成就基本上可以了,具体如下: 1. 下载程序并安装程序(首先安装python,其余随便) Python24 Trac 0.10.2 Clearsilver-0.9.14 如果是linux平台,可以选择更新的版本 Pysqlite 2.3.2 svn-python-1.4.2 2. 配置Trac(假设python安装在c:\python,trac建立在F:\trac\proj1) 初始化trac环境: c:\python\scripts> ..\python.exe trac-admin f:\trac\proj1 initenv 根据提示,输入工程名称,数据库,svn版本库等信息,根据需要输入 启动tracd c:\python\scripts>..\python.exe tracd –port 8000 f:\trac\proj1 补充:如果是需要同时开发多个工程,可以这样: c:\python\scripts>..\python.exe tracd –port 8000 f:\trac\proj1 f:\trac\proj2 或者启动一个目录下的所有工程: c:\python\scripts>..\python.exe tracd –port 8000 -e f:\trac\ 这样就可以通过http://localhost:8000/来访问trac系统了。 另外,和大部分程序类似,trac的配置文件为安装目录下conf\trac.ini,可以自行修改各项参数。 参考资料: trac官方网站 Windows下安装配置集成Trac 下一步的工作: 与apache的集成 权限管理 trac的模块与插件
python通过ADOdb访问mdb数据库
about 4 years ago - No comments
前言:python访问access数据库可能有更好的方法,以后会慢慢补充。 在这里我们使用著名的ADOdb来访问access数据库。ADOdb是php平台上一个被广泛应用通用的数据库访问中间层,后来出现了python版本。ADOdb支持众多的数据库,包括access,mysql,post-SQL,SQL-lite等。ADOdb在其SourceForge上的项目主页下载,最新的版本是adodb-py202bp。 通过ADOdb访问access的mdb数据库非常简单。 下面是一个例子,程序打开数据库中的一张表,并把内容打印出来: import win32com.client conn=win32com.client.Dispatch(‘ADODB.Connection’) DSN=’PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=d:\\python\\11_STAT.mdb;’ conn.Open(DSN) rs=win32com.client.Dispatch(‘ADODB.Recordset’) rs_name=’co’ rs.Open(‘qdzf’,conn,1,3) #1和3是常数.代表adOpenKeyset 和adLockOptimistadLockOptimistic rs.MoveFirst() count=0 while not rs.EOF: print “————————————————” for x in range(rs.Fields.Count): print “%20s: %s” % (rs.Fields.Item(i).name,rs.Fields.Item(x).Value) count=count+1 rs.MoveNext() print “Record Count:%d” % (count,) conn.Close()
python的安装
about 4 years ago - No comments
1. 下载与安装 python的安装非常简单,直接从官方网站下载python的安装程序,运行即可。目前最新的python版本是2.5.1。 2.IDE与编辑器 由于python是以缩进(ident)来表示程序的层次结构,因此非常不建议使用notepad之类的普通文本编辑器来编写python程序。所以选择一个合适的IDE或者编辑器就非常重要。官方网站上列出了一些常见的IDE和编辑器,我目前用的PythonWin。 3.入门教程 不知从什么年代开始,可能是学习AutoCAD的ObjectARX的时候吧,我认为最好的入门教程就是程序的帮助或者Tutorial,Python也不例外。官网上有一堆的入门教材,当然也包括了Python Tutorial。其实安装完python后,在安装目录下有个帮助文件python25.chm,里面同样带有tutorial。 4.其他 如果在windows下面开发,比如需要和com打交道的时候,这个Python for Windows extensions是不容错过的,可以从SourceForge下载。 5.其他的其他 来自水木社区Python版的推荐入门材料,本人尚未学习研究: 推荐书籍: 1、《A Byte of Python(简明python教程)》 http://www.byteofpython.info/language/chinese/index.html 2、《Dive into Python(Python研究)》 http://www.woodpecker.org.cn/diveintopython/index.html 3、《Learning Python》 4、《Programming Python》 推荐站点: 1、啄木鸟社区 http://www.woodpecker.org.cn/ 2、肥肥世家学习笔记 http://www.ringkee.com/note 3、Python书籍下载站 http://www.miex.org/book.html
感兴趣的几个内容
about 5 years ago - No comments
下面这几个内容都很让我感兴趣,有的接触过,有的没有,后面有空可以研究一下。 lumaQQ,是luma做的一个开源的java版的QQ,无论界面还是体系结构都堪称一流,而且也包括了当初建议它加的QQ机器人的功能。主页在lumaqq.linuxsir.org。 DotMSN,是一个C#写的开源的MSN,实现了MSN8的协议,可以研究一下。网页在http://www.xihsolutions.net/dotmsn/。顺便可以看看另外的java版的开源的msn。 Lua语言,www.lua.org,一个轻巧的脚本语言,目前主要用于游戏的脚本控制。目前尝试在程序中集成,还是比较方便。 Python,www.python.org,可以算是重量级别的脚本语言,有丰富的基础库,目前还没有学习。 FoodRank,建立一个类似google的PageRank技术。