-
2009-11-03
翻墙翻墙@python&swiftfox - [Python]
FQ是什么意思,我想不需要多解释了,本来不想翻来着,昨天做一个parse功能的时候,发现不能翻就不能获取内容,:(今天在Shun同学的帮助下,终于FQ成功了,哈哈。在Swiftfox里面的配置比较容易,但是,后面发现了一个新的问题,就是原本一直用来获取网页内容的urllib2不支持socks5代理,哼哼。
GOOGLE一下,很容易,pycurl是个不错的替代品,对于socks5的支持也不错,至此,python和swiftfox的FQ工作就完美解决了,哈哈。
利用pycurl对于socks5的支持,主要是参考了这篇文章。我自己写了一个简单的包装功能,如下(参数需要自己调整的哦):
import pycurl
import StringIO
def read_content(url):
c = pycurl.Curl()
b = StringIO.StringIO()
c.setopt(pycurl.WRITEFUNCTION, b.write)
c.setopt(pycurl.URL, str(url))
c.setopt(pycurl.TIMEOUT, 30)
c.setopt(pycurl.CONNECTTIMEOUT, 10)
c.setopt(pycurl.MAXREDIRS, 5)
c.setopt(pycurl.PROXY, '10.0.2.2')
c.setopt(pycurl.PROXYPORT, 7070)
c.setopt(pycurl.PROXYTYPE, 5)
c.perform()
c.close()
return b.getvalue() -
2009-10-23
win32com用来转换Excel文件 - [Python]
首先,我要承认的是,昨天做得事情其实停无聊的,是为了生成甘特图来着...,准确地说是利用Excel来维护一个FUNCTION GROUP的所有项目的信息(任务,启动/完成时间,完成状态等等),因为不是所有的人都有MS Project的license,然后,再导入到Project里面生成甘特图。
要实现这个功能,当然还是用我熟悉的Python,再加上win32com的库(要操作office,非它莫属)。做法很简单,就是把Excel的xls文件中间的一个worksheet,转换成cvs文件,然后,再利用正则解析出需要的信息,生成一个新的符合Project导入需求的cvs,然后,再利用win32com生成xls文件。最后一步,Project打开xls文件没有在脚本里面作,有个import wizard要处理,比较复杂,还是放放吧。
昨天碰到的主要的问题,是SaveAs的时候,指定FileFormat,Google上查到的24/6等数字,不能用,:(。在我就要放弃的时候,还是Google救了我,提示去看看testMSOffice.py($PYTHON_SITE_PACKAGES\win32com\test路径下),需要用以下语句来SaveAs就好了:
mod = gencache.EnsureModule("{00020813-0000-0000-C000-000000000046}", 0, 1, 2, bForDemand=1)
workbook.SaveAs(os.path.join(folder_name, to_import_xls_file), FileFormat = mod.constants.xlNormal)
写到这里,我忍不住还是要骂娘,没有上面的EnsureModule操作,constants是那不到内容的...,什么API的设计阿?
-
2009-09-23
利用Python批量转换Word文档生成reStructuredText文档 - [Python]
事情的缘由是这样的,有一批Word文档的模板文件,我想把它转换成rst文件,集成到我的读书笔记里面,基本上需要这样几步:
- 使用python的win32com库,将所有的word文档转换成txt。这里参照了这篇文章,尤其是关于SaveAs的选项部分,其他的文章中有错误。
- 解析所有的txt文件,根据模板的规则,读取数据到列表中。这个部分花了蛮多的时间去定义正则的规则和解析的规则,我还是对于正则表达式不熟悉,这个部分以后要加强了。
- 最后,根据列表的内容,生成相应的rst文件。
我做了一个filehandler.py的模块,给放到Dropbox上了,跟其他的朋友共享了,希望鞭策自己多多练习,把平常的一些工作脚本给积累起来。其中,写了一个walkdir的功能,可以传入过滤文件的条件,比较方便的利用了yield来进行遍历。这个小东东加深了我对于Generator的理解,算是额外的收获...
还有一个问题是,读取的数据中间有^M,shell或者vim有命令很容易的替换,我暂时没有找到办法在Python脚本里面做到,那位指教一下吧。:)
-
2009-09-10
RestructedText用来写文档 - [Python]
好吧,我承认最近有点偏执,觉得所有的事情都可以在Linux/Ubuntu下完成,尤其当我自认为是个程序员的时候。
昨天想写个学习笔记,觉得还是按照特定的格式来写会好一些,于是想到了Python的RestructedTextf以及DocUtils库,网上的教程看看就明白了,对于不做论文工作的我来说,Latex可能不太需要,Rst应该是够用了。
环境很简单,下载了docutils就有了很多转换的工具,基本的编辑是在Vim里面作的,用了VST的插件,感觉还不错。常用的命令如下:
Vst foldr:建立folders,长文档有用。
Vst head:把每个section使用的标识符罗列出来
写好了文本文件之后,可以使用下面的命令很容易的生成html文件:
rst2html.py -q TXTFILE HTMLFILE
VST插件自己也带了生成Html的功能,不过,生成的格式与Doctils不同,还是按照标准的来吧。
BTW: 搜索了一下,基于Doctuils有个Sphinx的库,Django等项目的文档都是用它来管理和生成的,Ubuntu下面安装和配置又很简单,就拿来用了。
-
2009-07-10
[FW]Tools of the Modern Python Hacker: Virtualenv, Fabric and Pip. - [Python]
备忘一下, Python的Build工具:http://simonwillison.net/2009/Jul/9/tools/ 使用zc.buildout和virtualenv来建立Django的开发环境:http://www.stereoplex.com/two-voices/a-django-development-environment-with-zc-buildout -
2009-06-15
Python的高级特性在Django中的使用 - [Python]
好久没有去看xlp223的博客了,今天偶然逛进去,发现自己原来错过了一本很好的讲解Django的书《Pro Django》。之前看到过这本书,但是,感觉上可能跟其他的Django的书差不多,就错过去了。看了看xlp223翻译的第二章,觉得很值,就像元创的评论,这本书有助于理解Django的源码...
前面尝试使用Django/Python也有一段时间了,但是,很多高级特性,尤其是元编程这部分,还不是很清楚,现在看起来xlp223翻译的这章,比之前看的其他的讲解的都好。
又要补课了...
-
2009-05-12
Django & Flex - [Python]
玩Python和Django也有一度时间了,周日的时候,看到INFOQ上有一篇Bruce Eckel谈Python/Flex/RIA的文章(如果你不记得BE是谁的话,回去翻翻Thinking in Java吧,:)),谈到了他与Adobe公司的人合写的一本书《First Steps in Flex》,勾起了我对于Flex的兴趣。之前对于FLEX的了解不多,因为不想过多的去学习ActionScripts,所以并不深入。上网查了查,好像目前在大型项目中对于FLEX的应用,在性能方面不是很理想。不过,对于小型的产品,尤其是很多BI/Reporting的解决方案,基于Flex的见得不少。
目前我的开发环境基本上是倾向于Ubuntu,不过,UNIX下面的好的Flex的IDE Flex Builder是要钱的,开源的Flash Develop又是基于.Net的,可能还是用Vim来写吧。
网上很容易查询到Django/Python与Flex集成的资料,利用pyamf,来写Django端的service比较容易,可以参考这个文章。回头有时间的话,可以考虑为TCM写个Flex的客户端。
BTW: 这篇文章介绍的Vim开发Flex的环境停详细的,值得借鉴。
-
2009-04-20
[备忘]Django的开发工具 - [Python]
Python的应用开发与发布,也是有些比较成熟的工具,buildout应该算是其中的一个。今天,看到一个帖子,详细了说明了使用buildout来进行一个django应用的开发工作,值得学习。
-
2009-02-16
TCM项目进展_0216 - [Python]
这几周公司的事情实在是太多了,TCM项目的紧张不大,时间都化在熟悉jQuery的语法上了,好久没有用,荒废了...
目前已经实现了一个中药在经方中使用频率的页面,还有几个就是选择几个中药来查询使用的经方。截图分别如下:
方根查询页面:

中药使用频率:

今天又强化了以下Python的语法:
- map & lambda: map(lambda item:item.json(), self.fanggen_items)
- unicode/str: 如果返回的字符串是UTF-8编码的话,字符串的操作还是应该用unicode而不是str方法
- list排序: sorted(self.fanggen_items, key = lambda item: item.medical_id)
还有就是Django的json处理:
TCM中进行ajax调用的时候,返回的对象往往不是model,是另外的view中的class。这样,不能直接调用'serializers.serialize'来处理queryset,需要将需要返回的对象转化为dict。如果view中处理的是个对象的list的话,我的做法是为每个对象实现json方法,返回{}。
map(lambda item: item.json())
-
2009-02-05
TCM项目启动 - [Python]
昨天晚上想起来的,准备做个学习中医的Django的Project-TCM(Traditional Chinese Medical)。一则希望借机熟悉Django1.0之后的admin的用法,同时,熟悉ropvim/pysmell等等在vim中的使用;二则,把《伤寒论》的112方输入到系统中去,可以更加方便的查询方剂的构成,每味中药出现的频率,中药组合(方根)的频次等等。这些都可以增加随机的测试,来增强自己对于方剂的记忆。以后,可以慢慢的把《金匮要略》《时方妙用》《神农本草经》等等的内容也加入进去。
Django的admin功能作的算是比较强了,基本的CMS的功能都有了,而且,定制性比较强。今天在作的时候,碰到了一个问题是,在添加/更新方剂的时候,报unicode的问题,不是每个方剂都报,而是其中的某几个报。后来,我发现是因为model的__unicode__方法如果使用了format输出的方式,一定要添加unicode的声明(u)...,其实是个很简单的错误,在django的文档中有说明,我自己给忘记了。
def __unicode__(self):
return u"%d %s" % (self.quantity, self.medical)







