标准库的使用
10.2探究模块
#10.2.1模块中有什么
#1.dir
import copy
print [n for n in dir(copy) if not n.startswith('_')]
'''
['Error', 'PyStringMap', 'copy', 'deepcopy', 'dispatch_table', 'error', 'name', 't', 'weakref']
输出copy模块中所有不以'_'开头的名字,'_'开头的不能引用
'''
#2.__all__变量
print copy.__all__
'''
['Error', 'copy', 'deepcopy']
'''
#10.2.2用help帮助
print help(copy.copy)
'''
Help on function copy in module copy:
copy(x)
Shallow copy operation on arbitrary Python objects.
See the module's __doc__ string for more info.
None
'''
print copy.copy.__doc__
'''
Shallow copy operation on arbitrary Python objects.
See the module's __doc__ string for more info.
'''
#10.2.3文档
print range.__doc__
'''
range(stop) -> list of integers
range(start, stop[, step]) -> list of integers
Return a list containing an arithmetic progression of integers.
range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.
When step is given, it specifies the increment (or decrement).
For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!
These are exactly the valid indices for a list of 4 elements.
'''
#10.2.4使用源代码
print copy.__file__
'''
C:\Python27\lib\copy.pyc
'''
10.3标准库:一些最爱
#10.3标准库:一些最爱
#10.3.1sys(访问与Python解释器连接紧密的变量和函数
#reverseargs.py
import sys
args=sys.argv[1:]
args.reverse()
print ''.join(args)
print ''.join(reversed(sys.argv[1:])) #不知道为什么两个都输出不了
'''
argv命令行参数,包括脚本名称
exit([arg])退出当前程序,可选参数为给定的返回值或者错误信息
modules映射模块名字到载入模块的字典
path查找模块所在目录的目录列表
platform类似sunos5或者win32的平台标识符
stdin标准输入流
stdout标准输出流
stderr标准错误流
'''
#10.3.2os提供访问多个操作系统服务的功能
#10.3.3fileinput遍历文本文件的所有行
#第11章详细介绍
#10.3.4集合,堆和双端队列
#1.集合
print set(range(10)) #结果 set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
print set(['a','b','c']) #结果 set(['a', 'c', 'b'])
a=set([1,2,3])
b=set([2,3,5])
print a.union(b) #求并集 结果 set([1, 2, 3, 5])
c=a&b
print c.issubset(a)
print c<=a
print c.issuperset(a)
print c>=a
print a.intersection(b)
print a&b
print a.difference(b)
print a-b
print a.symmetric_difference(b)
print a^b
print a.copy()
print a.copy() is a
'''
结果
True
True
False
False
set([2, 3])
set([2, 3])
set([1])
set([1])
set([1, 5])
set([1, 5])
set([1, 2, 3])
False
'''
a=set()
b=set()
print a.add(frozenset(b)) #集合的集合 结果 None
#2.堆heap
from heapq import * #堆库
from random import shuffle
data=range(10)
shuffle(data)
heap=[]
for n in data:
heappush(heap,n) #将n入堆
print heap #结果 [0, 1, 3, 4, 2, 8, 7, 9, 6, 5] 有规律,i位置的元素比2i和2i+1位置的元素小(堆属性)
heappush(heap,0.5) #将0.5按堆规则入堆
print heap #结果 [0, 0.5, 4, 3, 1, 8, 7, 9, 5, 6, 2]
print heappop(heap) #将堆中最小的元素输出 结果 0
print heap #[0.5, 1, 2, 3, 4, 7, 8, 5, 9, 6]
heap=[10,9,8,7,6,5,4,3,2,1]
heapify(heap) #将heap转化为堆属性
print heap #结果 [1, 2, 4, 3, 6, 5, 8, 10, 7, 9]
print heapreplace(heap,0.5) #输出最小的元素,且将0.5加入堆 结果1
print heap #结果[0.5, 2, 4, 3, 6, 5, 8, 10, 7, 9]
#3双堆队列(double-ended queue 或者 deque)
from collections import deque
q=deque(range(5))
q.append(5)
q.appendleft(6)
print q
print q.pop()
print q.popleft()
print q.rotate(3)
print q.rotate(-1)
print q
'''
结果
deque([6, 0, 1, 2, 3, 4, 5])
5
6
None
None
deque([3, 4, 0, 1, 2])
'''
#10.3.5time 获得当前时间、操作时间和日期、从字符串读取时间及格式化时间为字符串
#print time.ascyime() #将当前时间格式化字符串
#10.3.6random
from random import *
from time import *
date1=(2017,3,15,0,0,0,-1,-1,-1)
time1=mktime(date1)
date2=(2018,3,15,0,0,0,-1,-1,-1)
time2=mktime(date2)
random_time=uniform(time1,time2)
print asctime(localtime(random_time)) #结果Tue Feb 20 13:59:04 2018 随机的在time1-time2之间生成随机时间
from random import randrange
num=2
sides=3
sum=0
for i in range(num):sum+=randrange(sides)+1
print "result",sum #结果 4(随机)
#10.3.7 shelve简单的存储方案
#1.潜在的陷阱
import shelve
s=shelve.open('test.dat')
s['x']=['a','b','c']
s['x'].append('d')
print s['x'] #结果 ['a', 'b', 'c'] 没有'd',还没来得及存储
temp=s['x']
temp.append('d')
s['x']=temp
print s['x'] #结果 ['a', 'b', 'c', 'd']
#2.简单的数据库示例
#10.3.8 re 正则表达式
#1.什么是正则表达式——可以匹配文本片段的模式
# '.'通配符,可以代表任意字符
#对特殊字符进行转义 Python\\.py
#匹配字符集。'[pj]ython',可以表示python和jython,'[a-z]'表示字母a-z,'[a-zA-Z0-9]'表示大小写字母和数字,'[^abc]'匹配所以除了abc的字符
#选择符和子模式,例:只去pytgon和perl,两种方式 “python|perl","p(ython|erl"
#可选项和重复子模式
#。。。
#2.re模块的内容