Python 重要标准库1

来源:互联网 发布:淘宝数据包上传 编辑:程序博客网 时间:2024/06/08 16:58

1.fileinput模块


函数介绍

1.input([files[,inplace[,backup]])

这是最重要的一个函数,便于遍历多个输入流中的行 你能将inplace参数设置为真值进行原地处理,再进行原地处理的时候可选的backup参数将文件名扩展备份到通过原始文件创建的备份文件中

例子:写一个脚本实现把test1.txt文件中的Python替换

#!/usr/bin/pythonimport fileinputfor line in fileinput.input('test1.txt',backup='_bak',inplace=1):    print line.replace('Python','LinuxEye'),fileinput.close()~                       
test1.txt文件

执行脚本后生成 test1.txt 和 test1.txt_bak




2.filename() 返回当前文件名称 lineno()返回当前文件的行数 isfirstline() 检查时候当前行是第一行

例子:写一个为python脚本添加行号的脚本

#!/usr/bin/python                        import fileinputfor line in fileinput.input(inplace=True):    line = line.rstrip()    num = fileinput.lineno()    print '%-40s # %2i' % (line,num)
执行 python numberlines.py  numberlines.py

显示结果



3.nextfile() 关闭当前文件移动到下一个文件 close() 关闭序列


2.数据结构模块 集合set,堆heap,双端队列deque

(1)set

(1)set是由序列或者其它可迭代对戏构建的。它们主要用于检查成员资格,因此副本是被忽略的,即不存在重复的元素

(2)集合的元素顺序任意

(3)常用函数有 union:求集合并集 issuperset intersection difference & <= >= 具体意思看例子:


(2)heapq

 堆是优先队列的一种,使用优先队列能以任意顺序增加对戏,并且能够在任何时间找到最小元素

 heap的基本操作函数:

heappush(heap,x),heappop(heap),  入堆,及最小元素出堆操作

heapify(heap), 将heap属性强制应用到任意一个列表

heapreplace(heap,x) 将最小元素弹出,同时将x入堆

注意堆中元素并不是严格排序的,但是它满足如下规则:位于i 位置上的元素总大于位于位置i/2的元素

3)deque

deque是数据结构中的双端队列

双端队列能够有效地在左侧增加和弹出元素,这是列表无法实现的,除此之外,它还能有效地旋转(rotate)元素(将它们左移或右移,使得头尾相连)


3.random模块

random模块包括返回随机数的函数,但注意事实上它产生的数字都是伪随机数,如果需要真的随机性,应该使用os模块的urandom函数

常用函数有:

uniform(a,b) 返回随机实数n 在[a,b)区间 randrange([start],stop,[step]): 返回range(start,stop,step)中的随机数 


random.choice(seq): 从序列中返回随机元素random.shuffle将给定的序列元素进行随机移位 random.sample从给定序列序列中均一地选择给定数目的元素,同时确保元素互不相同


4.shelve模块 

shelve模块提供一个简单的将数据存储到文件中的方法,它有一个open函数,在调用它的时候(使用文件名作为参数),它会返回一个shelf对象,你可以用它来存储内容,只需要把它当做普通的字典(但键一定要作为字符串)来操作即可。在完成工作(并将内容存储待磁盘之后,调用它的close方法。

下面是一个简单的使用shelve模块实现的数据库应用程序:

import sys,shelvedef store_person(db):    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] = persondef lookup_person(db):    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 'The available commands are:'    print 'store:Stores information about a person'    print 'lookup: Look ip a person from ID number'    print 'quit : save changes and exit'    print '?:Print this message'def enter_command():    cmd = raw_input('Enter command (?for help): ')    cmd = cmd.strip().lower()    return cmddef main():    database = shelve.open('/home/chenwu/databse.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':                return    finally:        database.close()if __name__=='__main__':  main()
运行结果

先输存入若干信息,然后就可以查看


5.re模块

re模块包含一些很有用的操作正则表达式的函数

re.compile将正则表达式(以字符串书写的)转换为模式对象,可以实现更有效率的匹配。通常与search,match等函数结合使用,在调用这些函数时如果使用字符串表示的正则表达式,它们也会在内部将字符串表示为正则表达式对象


re.search会在给定字符串中寻找第一个匹配给定正则表达式的子串,re.match会在给定字符串的开头匹配正则表达式。

re.split会根据模式的匹配项来分割字符串,它允许用任意长度的逗号和空格序列来分割字符串,它有一个maxsplit参数,表示字符串最多可以分割的次数


re.findall以列表的形式返回给定模式的所有匹配项



上面的例子首先返回句子中匹配英文单词的列表,然后返回句子中匹配标点符号的列表

re.sub函数 可以使用给定的替换内容将匹配模式的子字符串替换掉

假设要把类似‘*something*'的字符串用'<em>something</em>替换:

首先建立模式对象,这个模式对象表示第一个字符和最后一个字符都是* 中间是除了*的任意若干字符

从上述例子可以看到,普通文本已经成功转换成HTML


下面用re模块实现一个简单的模板系统

它的功能是可以自动翻译[]中的字符串,实现运算到过程到结果的翻译,和赋值语句的翻译

例如 [7+9]可以翻为16

'[name = "Mr.Gumby:]Hello,[name]'翻译为'Hello,Mr.Gumby'

脚本templates.py代码如下:

#templates.py#coding:utf-8import fileinput,re#匹配中括号里的字段field_pat = re.compile(r'\[(.+?)\]')#将变量收集到这里scope = { }#用于re.sub中def replacement(match):    code = match.group(1)    try:        #如果字段可以求值, 用eval函数求值        return str(eval(code,scope))    except SyntaxError:   #否则执行相同作用域内的赋值语句。用exec 实现赋值语句的翻译       exec code in scope        return ' '#将所有文本以一个字符串的形式获取lines = []for line in fileinput.input():    lines.append(line)text = ' '.join(lines)#将field 模式的所有匹配项都替换掉print field_pat.sub(replacement,text)
键一个test.txt 内容如下:

执行



0 0
原创粉丝点击