BLOG
Enjoy when you can, and endure when you must.
DEC 15, 2013/Python
open函数: 功能简单,学问不少
任何一个有经验的程序员接触一门新语言时,都会首先在该语言的工具箱中寻找文件的相关工具。因为处理外部文件是一种非常实用和常见的任务,该语言的文件处理接口设计的好坏,在很大程度上决定着这门语言工具的实用性。Python对文件的支持,体现在很多层次上:从内建的open函数,到标准库模块提供的一些特定的工具,比如os,再到遍布网络的各种第三方提供的实用工具。本文则主要讨论内建的open函数。在Python中,文件对象是内建类型file的实例。内建函数open会创建并返回一个文件对象。第一个参数是一个字符串,指定文件的路径。而第二个参数也是一个字符串,指定打开文件的模式。例如:>>&g...
DEC 13, 2013/Python
解析经过压缩后的网页
在《抓站进行曲》中,我们利用urllib2提供的方法成功得到了网页数据。不过对于数据的处理来说,还有一种情况没有考虑,如果网页内容是被压缩过呢?我们来抓取新浪新闻试试:>>> req = urllib2.urlopen('http://news.sina.com.cn/c/2013-12-13/075828974213.shtml') >>> data = req.read() >>> data[1000:1300] '\xa1j\x1...
DEC 12, 2013/Python
抓站进行曲
抓站挺好玩的(不过对方心情可就不好说了= =),能够满足某些有趣的需求。Python标准库中的urllib2(在Python3中拆分成urllib.request和urllib.error,这里以Python2作为示例)也很善于做这个事。对于一般的网站来说,请求并获得网页内容是很简单的,借助于urllib2.urlopen两行代码就能搞定:>>> import urllib2 >>> res = urllib2.urlopen('http://www.dannysite.com/blog/...
DEC 11, 2013/Python
以随机顺序访问列表的元素
random是Python标准库中提供的专门用于生成随机数的模块,我曾在《利用Python生成随机数》中提到了利用random模块来生成随机数的几种方法。今天又出现了一个新的需求,打乱列表元素。还是正式点说吧,就是以随机顺序访问列表的元素。要想以随机的顺序访问列表,最简单的方法是首先将列表转化为随机的顺序,然后再线性的访问处理后的列表即可。random中就有方法提供了这样的“洗牌”操作,那就是random.shuffle。来看看下面的例子:>>> L = range(10) >>> L [0, 1,...
DEC 08, 2013/Python
注意Python的共享引用
Python中的共享引用是随处可见的,这也就意味着随时注意该行为是非常重要的,否则就可能出错。假设我们需要创建一个大小为5x5的矩阵并以数字0对矩阵进行初始化,根据Python的一些特点和使用技巧,很可能会这样来做:>>> matrix = [[0] * 5] * 5 >>> for row in matrix: print row [0, 0, 0, 0, 0] [0, ...
DEC 06, 2013/Python
Python列表分片与技巧
Python的列表是很常用的数据类型。列表是有序的,因此支持类似Python字符串对象中的大部分操作方式。并且因为列表属于可变数据类型,因此还可以支持原处修改。本文主要关注列表的分片操作。通过偏移量来获取列表中对应位置的元素是列表最基本的操作:>>> l = range(10) >>> l [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> l[2] 2当需要获取列表中的...
DEC 05, 2013/Python
datetime时区转换
Python标准库中的datetime模块提供了各种对日期和时间的处理方法。从本文的主题着手,首先利用datetime中提供的utcnow()方法获取到当前UTC时间:>>> import datetime >>> utc_now = datetime.datetime.utcnow() >>> utc_now datetime.datetime(2013, 12, 4, 15, 43, 21, 872000)...
DEC 01, 2013/Python
Python对象拷贝
在Python中,当给一个对象进行赋值、将其作为参数传递或作为结果返回时,总是使用的是一个指向原对象的引用,而不是拷贝。 由此可见,如果确实需要拷贝则需要明确使用“拷贝”的方法来解决。 不过还要注意的是,对象拷贝始终针对的是可变数据类型,对于像字符串、数字、元组等不可变对象是没有必要拷贝的。 Python标准库中的copy模块提供了对象拷贝的方法: copy.copy()返回一个具有相同的内容和属性的对象,该方法属于浅拷贝,它生成一个新对象,但是对象内部的属性和内容仍引用原对象。 >>> imp...
NOV 27, 2013/Python
Python版二叉查找树
二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。 二叉查找树的特点则在于对于树中的每个节点X,它的左子树中所有项的值小于X中的项,而它的右子树中所有项的值大于X中的项。这意味着该树所有的元素都可以用某种一致的方式排序。如下图所示是一个二叉查找树: 为实现一个二叉查找树,我们将创建三个类: BinaryTree:代表一个二叉树,实现初始化和操作; EmptyNode:代表空节点; BinaryNode:代表非空节点,具...
NOV 26, 2013/Python
解析XML:更优的性能
BeautifulSoup是一个很强大的HTML/XML解析工具,简单易用。不过从性能上来说,它可能并不是最好的。因此,我们考虑使用另外一个第三方包lxml,它在底层是通过C实现的,因此在速度上会有明显的优势。还是之前的例子:<?xml version="1.0" encoding="utf-8"?> <CSubmitState xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www...
<< < 1 2 3 4 5 > >>