• 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
    Tag:Python build
  • 2009-06-15

    Python的高级特性在Django中的使用 - [Python]

    好久没有去看xlp223的博客了,今天偶然逛进去,发现自己原来错过了一本很好的讲解Django的书《Pro Django》。之前看到过这本书,但是,感觉上可能跟其他的Django的书差不多,就错过去了。看了看xlp223翻译的第二章,觉得很值,就像元创的评论,这本书有助于理解Django的源码...

    前面尝试使用Django/Python也有一段时间了,但是,很多高级特性,尤其是元编程这部分,还不是很清楚,现在看起来xlp223翻译的这章,比之前看的其他的讲解的都好。

    又要补课了...

    Tag:python django
  • 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应用的开发工作,值得学习。

    Tag:django python
  • 2009-02-16

    TCM项目进展_0216 - [Python]

    这几周公司的事情实在是太多了,TCM项目的紧张不大,时间都化在熟悉jQuery的语法上了,好久没有用,荒废了...

    目前已经实现了一个中药在经方中使用频率的页面,还有几个就是选择几个中药来查询使用的经方。截图分别如下:

    方根查询页面:

    中药使用频率:

    今天又强化了以下Python的语法:

    1. map & lambda: map(lambda item:item.json(), self.fanggen_items)
    2. unicode/str: 如果返回的字符串是UTF-8编码的话,字符串的操作还是应该用unicode而不是str方法
    3. 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())

    Tag:Python Django
  • 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)