导入模块:
import sys
sys.path.append('c:/python27')//告诉程序到这里找模块
1.1. 若模块是一个程序,则在导入时只执行一次,后面导入不在执行,修改后可以用reload
函数重新导入,这时会重新执行。
#hello2.py
def hello():
print 'Hello,World!'
>>>import hello2
>>>hello2.hello()
hello,world!
#hello3.py
def hello():
print "Hello,world!"
#A test 测试模块
hello()
>>>import hello3
**Hello,World!**#这不是想要的结果
>>>hello3.hello()
Hello,World!
#解决方法:使用__name__变量
#hello4.py
def hello():
print 'Hello,World!'
def test():
hello()
if __name__ == '__main__':test()
>>>import hello4#达到预期效果
>>>hello4.hello()
2.把模块放进目录的几种方法:
2.1 把模块放进sys
中的path
路径中找。
>>>import sys
2.2 编辑sys.path
,还得在环境变量中实现PYTHONPATH
,它包含模块所在的目录。
2.3 命名模块。
包含代码的文件的名字和模块相同。
包
__init__.py
的文件。模块包含的内容:
dir函数: 列出模块包含内容: dir.copy()
all变量:从模块导入所有名字包括什么含义: copy.__all__
:['Error','copy','deepcopy']
help:获取帮助
doc:查看文档 : range.__doc__
file: 使用源代码: copy.__file__
标准库
3.1sys
模块
函数 | 作用 | 例子 |
---|---|---|
argv | 命令行参数,包括脚本名称 | |
exit([arg]) | 退出当前程序,可选的参数为给定的返回值或者错误信息 | |
modules | 映射模块名字到载入模块的字典 | |
path | 查找模块所在目录的目录名列表 | |
platform | 类似sunos或win32的平台标识符 | |
stdin | 标准输入流 | |
stdout | 标准输出流 | |
stderr | 标准错误流 |
3.2 os
模块:提供访问多个操作系统服务的功能。
3.3 fileinput
模块:读写文件。
函数 | 作用 |
---|---|
input(file[,inplace[,backup]]) | 用于遍历多个输入流的行 |
filename() | 返回当前文件的名称 |
lineno() | 返回当前累计的行号 |
isfirstline() | 检查当前行是否是文件的第一行 |
isstdin() | 检查最后一行是否来自sys.stdin |
nextfile() | 关闭当前文件,移动到下一个文件 |
close() | 关闭序列 |
4. 集合,堆和双端队列
4.1
set(range(10))
set([0,1,2,3,4,5,6,7,8,9])
4.2 集合
集合是可变的不能用作字典中的键。
4.3 堆
函数 | 作用 |
---|---|
heappush(heap,x) | 将x入堆 |
heappop(heap) | 将最小的元素弹出 |
heaoify(heap) | 将heap属性强制应用到另一个表 |
heaprepalce(heap,x) | 将堆中最小元素弹出,同时x入栈 |
nlargest(n,iter) | 返回iter中第n大元素 |
nsmallest(n,iter) | 返回iter中第n小元素 |
4.4 双端队列
函数 | 作用 |
---|---|
asctime([tuple]) | 将时间元组转化为字符串 |
localtime([secs]) | 将秒数转化为日期,以本地时间为准 |
mktime(tuple) | 将时间元组转为本地时间 |
sleep(secs) | 休眠secs秒 |
strptime(string[,format]) | 将字符串解析为时间元组 |
time() | 打印当前时间 |
4.5 random模块
返回随机数的函数
4.6 shelve模块
存储数据。
4.6.1 使用shelve模块修改临时变量时,要将临时变量绑定到副本上,并且在它被修改后重新存储这个副本。
import shelve
s = shelv.open('test.dat')
s['x'] = ['a','b','c']
s['x'].append('d')
>>>s['x']
['a','b','c']
#解决方法,临时变量
temp = s['x']
temp.append('d')
s['x'] = temp
>>>s['x']
['a','b','c','d']
4.7 re
模块
4.7.1
通配符(.):匹配任何字符
转义():对特殊字符转义
字符集([]):[^abc]反转字符,除了abc以外的任意字符。
选择字符或子模式(|):’p(ython|er)’
4.7.2 re模块的一些重要函数
函数 | 作用 |
---|---|
compile(pattern[,flags]) | 包含正则表达式的字符串创建模式对象 |
search(pattern,string[,flags]) | 在字符串中寻找模式 |
match(pattern,string[,flags]) | 在字符串的开始处匹配模式 |
split(pattern,string[,maxsplit=0]) | 根据模式的匹配项分割字符串 |
findall(pattern,string) | 列出字符串中模式的而所有匹配项 |
sub(pat,repl,string[,count=0]) | 将字符串中所有pat的匹配用repl替换 |
escape(string) | 将字符串中所有特殊正则表达式字符转义 |
4.7.3匹配对象和组
group(0):表示整个字符串。
group(m):表示左边有m个左括号的m组
4.7.4贪婪和非贪婪模式
加上(?):是非贪婪的,即最少匹配原则
(.+)(.+?)
#贪婪模式
>>>emphasis_pattern = r'\*(.+)\*'
>>>re.sub(emphasis_pattern,r'\1','*This* is *it*!')
'This* is *it!'
#非贪婪模式
>>>emphasis_pattern = r'\*(.+?)\*'
>>>re.sub(emphasis_pattern,r'\1','*This* is *it*!')
'This is it!'
4.7.5 模板系统
模板是通过放入具体值从而得到某种已完成的文件。
#template.py
import fileinput,re
field_pat = re.compile(r'\[(.+?)\]')
scope = {}
def replacement(match):
code = match.group(1)
try:
return str(eval(code,scope))
except SyntaxError:
exec code in scope
return ''
lines = []
for line in fileinput.input():
lines.append(line)
text = ''.join(lines)
print field_pat.sub(replacement, text)
#data.txt
[x=2]
[y=3]
The sum of [x] and [y] is [x+y]
#运行
python template.py data.txt
#结果
The sum of x and y is 5