晚上折腾Python写人人网爬虫,目标是所有好友的相册和个人资料以及通讯录信息,目前相册抓取借助网上一位TX发现的人人相册的小Bugs已经实现,晚上对两个以前不喜欢用的功能颇有所得,在这里暂且记录一下。
首先是Python内置的数据库引擎Shelve,Python的数据持久化操作主要有六类:普通文件、DBM文件、Pickled对象存储、shelve对象存储、对象数据库存储、关系数据库存储。咱们初学者比较喜欢用普通文本文件和第三方的关系型数据库来进行数据持久化操作,但是在一些诸如要求"断点工作"的情况下用普通文件存储数据显得有些不够用而调用第三方数据库就显得杀鸡用牛刀,所以这个时候就轮到Shelve闪亮登场了:
这是一个简单例子实现依靠Shelve完成断点工作功能
import shelve
db = shelve.open(LastUpdated, writeback = True)
if not db.has_key('WorkList'): db['WorkList'] = []
if len(db['WorkList']) == 0:
db['WorkList'] = [id for id, work in allworkList]
updateList = db['TaskList']
Shelve使用起来非常简单
import shelve
shelve = shelve.open("filename-on-disk") #打开shelve文件
MySpecialVariable = shelve['keyname'] #从shelve中读取
shelve['keyname'] = MySpecialVariable #给shelve赋值
shelve.close() #关闭对象
当需要在意外情况发声,诸如进程被杀死或者以外终止的情况下对Shelve进行永久写入使,需要使用sync()
import shelve
shelve = shelve.open("filename-on-disk", writeback = True)#或者shelve=shelve.open(filename-on-disk, 'c')
shelve.sync()
另外一个Set()类型:Set是简单对象的无需集合。在set中,没有重复元素。通常在对集合中元素的顺序和出现的次数没有什么要求时使用。对于set,有一些函数可以帮助求解set之间的关系,例如:包含关系,交集关系等。
定义一个set:s = set([1,2,3,4])。使用set函数来定义一个set。
可以使用in关键字来判定某个对象是否属于一个set:
s = set([1,2,3]) print(1 in s) #False
可以使用&、|、-求两个set的交集、并集、差集:
>>> s1 = set([1,2,3,4]) >>> s2 = set([2,4]) >>> print(s1 & s2) set([2, 4]) >>> print(s1 | s2) set([1, 2, 3, 4]) >>> print(s1 - s2) set([1, 3]) >>>
关于更多set的使用方法,使用help(set)。
发表评论: