利用tkFileDialog.askopenfilenames获取多个文件名

用Python写小脚本,要选择文件,最简单的方式莫过于使用内置的Tk的控件了。如果需要同时选择多个文件,可以使用tkFileDialog.askopenfilenames,如下:

    import tkFileDialog
    fns = tkFileDialog.askopenfilenames(filetypes=[("text file", "*.txt"),("all","*.*")])
    print(repr(fns))

但问题是,在Python 2.6以后的版本,tkFileDialog.askopenfilenames返回的居然是字符串,类似于这样:

    u'C:/Python27/LICENSE.txt C:/Python27/NEWS.txt C:/Python27/README.txt'

如果每个文件的路径中都没有空格,用fps.split()就可以分解字符串得到文件名的列表,如果文件名或文件路径中包含空格,这个字符串将很不好解析。解决方法如下 …

more ...

Python 3.x中的nonlocal及其在2.x中的变通办法

在Python 2.x中,函数内部可以定义函数,内层的函数可以读取外层函数的局部变量,但却不可以修改它.

    def outter():
        x = 1
        def inner():
            print("inner is called, x=", x)
        return inner

    outter()()

上面这个程序是没问题的,但是,下面这个就会出错:

    def outter():
        x = 1
        def inner():
            print("inner is called, x=", x)
            x = 2
        return inner

    outter()()

提示竟然是UnboundLocalError: local variable 'x' referenced before assignment,找不到变量 …

more ...

在 PyGraphviz 中使用中文

在 PyGraphviz 使用中文要注意的:

  • 汉字要使用 unicode ,例如:u"汉字"

  • 添加节点时要指定中文的字体,例如 fontname=SimSun

示例如下:

    import pygraphviz as pg

    G = pg.AGraph()

    G.add_node(u"经理", fontname="`Microsoft YaHei", shape="rect", style="rounded", fontsize=18) #雅黑
    G.add_node(u"秘书", fontname="SimHei") #黑体
    G.add_node(u"小兵", fontname="SimSun") #宋体
    G.add_node …
more ...


用Python解析HTML,BeautifulSoup使用简介

Beautiful Soup是一个用于解析HTML文件的Python库,这里介绍一下它的基本使用方法。

Beautiful Soup字面意思是美好的汤,主页在 http://www.crummy.com/software/BeautifulSoup/, 下载与安装无需啰嗦,假设你已经装好了,现在开始吧。


装汤——Making the Soup

首先要把待解析的HTML装入BeautifulSoup。BeautifulSoup可以接受文件句柄或是字符串作为输入:

    from bs4 import BeautifulSoup
    fp = open("index.html")
    soup1 = BeautifulSoup(fp)
    soup2 = BeautifulSoup("<html>data</html>")

汤料——Soup中的对象

标签(Tag)

标签对应于HTML元素,也就是应于一对HTML标签以及括起来的内容(包括内层标签和文本),如:

    soup = BeautifulSoup('<b class="boldest …
more ...