标准库(二)
1. time
-
time模块可以实现以下功能:获得当前时间、操作时间和日期、从字符串读取时间和格式化时间为字符串
-
python日期可以用实数(时间戳)或9个整数的元组
-
日期元组的含义
索引 字段 值 0 年 比如20000,2001,等待 1 月 范围1~12 2 日 范围1~31 3 时 范围0~23 4 分 范围0~59 5 秒 范围0~61 6 周 当周一为0时,范围0~6 7 儒历日 范围1~366 8 夏令时 0,1或-1 -
time模块重要函数
函数 描述 asctime([tuple]) 将时间元组转换为字符串 localtime([secs]) 将秒数转换为日期元组,以本地时间为准 gmtime([secs]) 将秒数转换为日期元组,以全球统一时间为准 mktime(tuple) 将时间元组转换为本地时间,返回时间戳 sleep(secs) 休眠secs秒 strptime(string[, format]) 将字符串解析为时间元组 strftime(format[, tuple]) 将日期时间元组转换为字符串,按照format给定的格式 time() 当前时间(UTC为准) python另外两个和时间密切相关的模块,datetime(支持日期和时间的算法)和timeit(帮助开发人员对代码段的执行时间进行计时)
2. random
-
random模块包括返回随机数的函数,可以用于模拟或用于产生随机输出的程序
random产生的数字都是伪随机的,如果要真随机,应该用os模块的urandon函数,random模块中的SystemRandom类也基于同种功能,可以让数据接近正真的随机数
-
random模块一些重要的函数
函数 描述 random() 返回0<n<=1之间的实数 getrandbits(n) 以长整型形式返回n个随机数 uniform(a, b) 返回随机实数n,其中a<= n <b randrange([start,] stop[, step]) 返回range(start, stop, step)中的随机数 choice(seq) 从序列seq中返回随意元素 shuffle(seq[, random]) 原地打乱序列seq sample(seq, n) 从序列seq中选择n个随机且独立的元素 >>> import random >>> random.random() 0.02375061494350461 >>> random.random() 0.1865990002189728 >>> random.random() 0.7556505726173611 >>> random.random() 0.5829684896894718 >>> random.getrandbits(2) 3L >>> random.getrandbits(2) 2L >>> random.getrandbits(2) 3L >>> random.getrandbits(2) 2L >>> random.getrandbits(2) 2L >>> random.getrandbits(2) 3L >>> random.getrandbits(2) 1L >>> random.getrandbits(2) 2L >>> random.getrandbits(2) 0L >>> random.getrandbits(2) 1L >>> random.getrandbits(2) 0L >>> random.uniform(10, 20) 18.98958779763359 >>> random.uniform(10, 20) 19.729827779529302 >>> random.uniform(10, 20) 11.759455219152438 >>> random.randrange(10) 5 >>> random.randrange(10) 4 >>> random.randrange(10) 1 >>> random.randrange(10) 7 >>> random.shuffle(range(15)) >>> a = range(15) >>> random.shuffle(a) >>> a [8, 7, 9, 1, 6, 5, 14, 13, 2, 0, 10, 12, 11, 4, 3] >>> random.shuffle(a) >>> a [9, 0, 1, 7, 14, 4, 3, 6, 10, 8, 12, 13, 11, 2, 5] >>> random.shuffle(a) >>> a [9, 3, 12, 7, 0, 10, 2, 8, 13, 1, 5, 14, 11, 4, 6] >>> random.sample(a, 3) [5, 10, 13] >>> random.sample(a, 3) [13, 9, 10]
-
应用示例,
# 1. 获取指定时间段内的一个随机时间 >>> from time import * >>> from random import * >>> date1 = (2008, 1, 1, 0, 0, 0, -1 ,-1 ,-1) >>> time1 = mktime(date1) >>> time1 1199116800.0 >>> date2 = (2009, 1, 1, 0, 0, 0, -1, -1, -1) >>> time2 = mktime(date2) >>> time2 1230739200.0 >>> random_time = uniform(time1, time2) >>> random_time 1228026864.2611487 >>> print(asctime(localtime(random_time))) Sun Nov 30 14:34:24 2008 # 2. 投筛子,用户选择筛子数和筛子面数 >>> num = input('How many dice?') How many dice?3 >>> sides = input('How Many sides per die?') How Many sides per die?6 >>> s = 0 >>> for i in range(num) : s += randrange(sides) + 1 >>> print 'The result is', s The result is 13 # 3. 发牌程序,每次按回车发一张牌 #建立一副牌 >>> values = range(1, 11) + 'Jack Queen King'.split() >>> values [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 'Jack', 'Queen', 'King'] >>> suits = 'diamonds clubs hearts spades'.split() >>> suits ['diamonds', 'clubs', 'hearts', 'spades'] >>> deck = ['%s of %s' % (k, v) for k in values for v in suits] >>> len(deck) 52 >>> from pprint import pprint >>> pprint(deck[:12]) ['1 of diamonds', '1 of clubs', '1 of hearts', '1 of spades', '2 of diamonds', '2 of clubs', '2 of hearts', '2 of spades', '3 of diamonds', '3 of clubs', '3 of hearts', '3 of spades'] #洗牌 >>> shuffle(deck) >>> pprint(deck[:12]) ['Jack of hearts', '7 of clubs', '6 of clubs', 'King of spades', '10 of spades', 'King of diamonds', '2 of hearts', '10 of diamonds', '8 of clubs', '2 of diamonds', '10 of clubs', 'Jack of clubs'] #发牌 >>> while deck: raw_input(deck.pop())
3.shelve
-
shelve用法
常用的函数是open,调用时传入文件名作为参数,返回一个Shelf对象,Shelf对象当作普通字典(但是键一定要作为字符串)操作,完成工作(并且将内容存储到磁盘中)后,调用close方法
-
shelv.open返回的对象返回的对象并不是普通对象,这一点要特别注意
>>> s = shelve.open(r'd:\test.dat') >>> print s {} >>> s['x'] = ['a', 'b', 'c'] >>> s['x'].append('d') >>> s['x'] ['a', 'b', 'c'] #‘d’不见了 # 在Shelf对象中查找元素时,这个对象会根据已经存储的版本进行重新构建,给键赋值时她就被存储了,上述例子的操作过程 #列表['a', 'b', 'c']存储在键x下 #获得存储的表示,并创建新的列表,‘d’添加到副本中,修改的版本没有保存 #最终,再次获得原始版本---没有’d‘ #要想正确的使用shelve模块修改存储的对象,需要将临时变量绑定到获得的副本,并在修改后重新存储这个副本 >>> temp = s['x'] >>> temp ['a', 'b', 'c'] >>> temp.append('d') >>> temp ['a', 'b', 'c', 'd'] >>> s['x'] = temp >>> s['x'] ['a', 'b', 'c', 'd'] >>> s.close() #python2.4后还有个解决方法,将open函数的writeback参数设为true,如果这样做,所有从shelf读取或赋值到shelf的数据结构都保存到内存(缓存)中,并且只有关闭时才写回到磁盘
-
简单的数据库应用示例
#! /bin/sh # -*- coding -*- # database.py import sys, shelve def store_person(db): """ Query user for data and store it in the shelf object """ pid = raw_input('Enter unique ID number:') person = {} person['name'] = raw_input('Enter name:') person['age'] = raw_input('Enter age:') person['phone'] = raw_input('Enter phone number:') db[pid] = person def lookup_person(db): """ Query user for ID and desired field, and fetch the corresponding data from """ pid = raw_input('Enter ID number:') field = raw_input('What would you like to know?(name, age, phone) ') field = field.strip().lower() print field.capitalize() + ':', db[pid][field] def print_help(): print '*************** Menu ******************' print 'The available command are:' print 'store : Stores information about a person' print 'lookup : Looks up a persion from ID number' print 'quit : Save changes and exit' print '? : Prints this message' def enter_command(): cmd = raw_input('Enter command(? for help):') cmd = cmd.lstrip().lower() return cmd def main(): database = shelve.open(r'd:\test.dat') try: while True: cmd = enter_command() if cmd == 'store': store_person(database) elif cmd == 'lookup': lookup_person(database) elif cmd == '?': print_help() elif cmd == 'quit': break finally: database.close() if __name__ == "__main__": main()