参考1:https://www.cnblogs.com/wujiaqing/p/10709207.html
abs() all() any() bin() bool() bytearray() callable() chr() dict() dir() divmod() enumrate() eval() exec() filter() format() float() frozenset() globals() hasattr() hash() help() hex() id() input() int() isinstance() issubclass() iter() len() list() map() max() min() next() oct() open() ord() pow() print() range() reduce() repr() reversed() round() set() slice() sorted() str() sum() tuple() type() zip() __import__()
1. abs()函数返回数字的绝对值 2. all() 判断给定参数中的所有元素是否为函数 TRUE, 如果是返回 True,否则返回 False。 元素除了是 0、空、None、False 外都算 True; 空元组和空列表的返回值为True。 3. any() 判断给定参数是否全部为函数False, 是则返回False,假如有一个True,则返回True。 元素除了是 0、空、False外都算 TRUE。 4. bin()函数返回整数int或者长整数long int二进制表示 5. bool() 函数用于将给定参数转换为布尔类型,如果参数不是空的或不是0,则返回True;参数为0或无参数,返回False。 6. bytearray()方法返回新字节数组。 该数组中的元素是可变的,每个元素的值范围: 0 <= x < 256(即0-255)。 即bytearray()可修改的二进制字节格式。 7. callable()函数用于检查对象是否可调用。函数、方法、lambda函式、类别和实现 __call__ 方法类实例, 它都返回 True。(可以调用括号) 8. chr()函数使用一个范围range(256)内(即0~255)的整数作为参数,返回相应的参数ASCII数值。 9. dict()函数用于将元组/列表转换为字典格式。 10. dir()函数不带参数时,返回当前范围内的变量、方法和定义类型列表;带参数时,返回参数的属性和方法列表。 11. divmod() 函数结合除数和余数的运算结果,返回包含商和余数的元组(商x,余数y)。 12. enumerate() 函数用于将可遍历数据对象(如列表、元组或字符串)组合成索引序列,并列出数据和数据下标,通常用于 for 循环当中。Python 2.3. 以上版本可用,2.6 添加 start 参数。 13. eval() 函数用于执行字符串表达,并返回表达值。 14. exec() 存储在字符串或文件中的执行Python与句子相比eval,exec可以执行更复杂的Python代码。 15. filter()用于过滤序列,过滤掉不合格元素,返回迭代对象list()将其转换为列表。 注意: filter()接收两个参数,第一个是函数,第二个是序列,序列的每个元素作为参数传递给函数判断,然后返回True或 False,最后将返回 True 新列表中的元素。 16. format()是格式化字符串的函数 ,基本语法是通过的 {} 和 : 取代以前的 % 。format 函数可以接受无限参数,位置可以不按顺序。 17. float() 函数用于将整数和字符串转换为浮点数。 18. frozenset() 返回一个冻结的集合(一个无序的不重复元素序列),冻结后不能添加或删除任何元素。 19. globals() 函数将以字典格式返回当前位置的全局变量。 20. hasattr() 函数用于判断对象是否包含相应的属性。如果对象有该属性返回 True,否则返回 False。 21. hash() 哈希值用于获取对象(数字或字符串等)。不能直接应用 list、set、dictionary。 注意:在 hash() 对对象使用时,所得的结果不仅和对象的内容有关,还和对象的 id(),即内存地址。 22. help() 详细说明函数或模块用途。 23. hex() 函数用于将整数转换为16进制数。以0返回字符串x开头。 24. id()获取对象内存地址的函数。 25. input() 函数接受标准输入数据,返回为 string 类型。这个函数是最常用的。在Python3.x中 raw_input() 和 input() 整合,只保留input( )函数。 26. int() 函数用于将字符串或数字转换为整形。 27. isinstance() 判断一个对象是否是已知的类型,并返回布尔值。类似 type()。 isinstance() 与 type() 区别: type() 不考虑继承关系,不会认为子类是父类。 isinstance() 考虑继承关系,子类将被视为父类。 如果要判断两种类型是否相同,建议使用 isinstance()。 28. issubclass()用于判断参数class是否为类型参数classinfo如果子类是,则返回True,否则返回False。 语法:issubclass(class,classinfo)。 29. iter() 生成迭代器的函数。list、tuple等都是可迭代对象,我们可以通过iter()函数获取这些可迭代对象的迭代器,然后可以连续使用获得的迭代器next()函数来获取下条数据。iter()函数实际上是调整可迭代对象 __iter__ 方法。 # 注意:当已经迭代完最后一个数据之后,再次调用next()函数会被抛出 StopIteration告诉我们,所有的数据都已经迭代完成。 30. len() 方法返回对象(字符、列表、元组等)的长度或元素数。 31. list() 该方法用于将元组转换为列表。 注:元组与列表非常相似,区别在于元组的元素值不能修改,元组放在括号中,列表放在方括号中。 32. map()接收函数f和list,函数f依次作用list在每个元素上,得到一个新的list并返回。 33. max()函数返回给定参数的最大值,参数可以是序列。 34. min()函数返回给定参数的最小值,参数可以是序列。 35. next() 返回下一个迭代器项目。 36. oct() 函数将整数转换为八进制字符串。 37. open() 打开文件,创建函数 file 对象,相关方法可调用于读写。 38. ord()函数是chr()配对函数,以字符(长度为1的字符串)为参数,返回相应的ASCII数值,或者Unicode如果给出了数值 Unicode 如果字符超围的字符会导致一个 TypeError 的异常。 39. pow()函数返回xy次方的值。 注意:pow()通过内置方法直接调用,内置方法将参数作为整形, math 模块将参数转换为 float。 40. print()用于打印输出,最常见的函数。print 在Python3.x是函数,但是在Python2.x版本只是一个关键词。 41. range() 函数可以创建一个整数列表,通常用于 for 循环中。语法:range(start, stop[, step]) 42. reduce() 函数会对参数序列中元素进行累积。在Python3 ,reduce()放在里面functools如果要在模块中使用,需要先引入functools模块。 43. repr() 函数将对象转化为供解释器读取的形式。返回一个对象 string 格式。 44. reversed() 函数返回反转迭代器。 reversed(seq)要转换的序列可以是 tuple, string, list 或 range。 45. round() 方法返回浮点x的四舍五入值。(除非对精确度没什么要求,否则尽量避开用round()函数) 46. set() 函数创建一个无序的不重复元素集,可以进行关系测试,删除重复数据,计算交集、差集、并集等。 47. slice() 切片对象主要用于切片操作函数中的参数传递。 48. sorted() 函数对所有可迭代对象进行排序(默认升序)。 49. str() 函数将对象转化为string格式。 50. sum()函数求和计算参数。 51. tuple()函数将列表转换为元组。 # 注:元组与列表非常相似,区别在于元组的元素值不能修改,元组放在括号中,列表放在方括号中。 52. type() 如果您只有第一个参数,则返回对象类型,三个参数返回新类型对象。 53. zip() 函数用于将可迭代对象作为参数,将对象中对应的元素打包成一个元组,然后返回由这些元组成的对象。这样做的好处是节省了大量的内存。可以使用 list() 转换来输出列表。如果每个迭代器的元素数量不一致,则返回列表的长度与最短对象相同。利用 * 可将元组解压成列表。 54. __import__() 动态加载和函数使用函数。如果模块经常变化,可以使用 __import__() 动态载入。
参考2:http://www.360doc.com/content/19/0228/21/62214076_818220486.shtml
粗略地将内置函数分为六类:
输入输出: print() open() input() 迭代相关: enmuerate() zip() 序列属性: sum() max() min() len() 操作序列: sorted() reversed() range() 对象属性:dir() id() isinstance() type() 映射类型:eval() map() slice()
一、输入输出br> 1、print 函数将对象输出至控制台 print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False) *objects 为可变参数,可以接受任意多个对象。sep 参数表示输出对象之间的分隔符,默认为空格。
>>> print('Python', '高效编程')
Python 高效编程
分隔符为'*':
>>> print('Python', '高效编程', sep = '*')
Python*高效编程
格式化输出字符串的三种方式:
name = 'Python高效编程'
fmt1 = f'公众号:{name}'
fmt2 = '公众号:{}'.format(name)
fmt3 = '公众号:%s' %name
print(fmt1)
print(fmt2)
print(fmt3)
# 公众号:Python高效编程
2、open 函数打开文件并返回文件对象 open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None) file 为文件地址 mode 为打开文件的模式 默认为 'r',表示读取文件 常用的还有:'w' 表示写入文件 'b' 表示以二进制形式打开 常用上下文管理器 with 打开文件 f.read( ) 读取全部内容 f.readline() 读取一行内容
with open('test.txt', 'r') as f: text1 = f.read() with open('test.txt', 'r') as f: text2 = '' line = f.readline() while line: text2 += line line = f.readline() assert text1 == text2 print(text1) # 输出内容:Python 高效编程Python 高效编程Python 高效编程Python 高效编程###############
有时候,我们读取文件还会遇到乱码问题,可以指定编码格式: 当文件中有中文的时候,使用 'utf-8' 编码会导致异常:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb8 in position 7: invalid start byte
with open('test.txt', 'r', encoding='utf-8') as f: text1 = f.read() 可以尝试 'gb2312' 或者 'gbk' 编码来打开含有中文字符的文件。这时,便可以成功打开文件。
with open('test.txt', 'r', encoding='gb2312') as f: text1 = f.read() with open('test.txt', 'w', encoding='gbk') as f: f.write('Python高效编程')
3、input 函数获取控制台输入 input([prompt]) input 可接受字符串为参数,提示用户输入。
>>> s = input('请输入公众号名称:')
请输入公众号名称:
Python高效编程
>>> s
'Python高效编程'
二、迭代相关 1、enumerate 函数返回元素的序号与对应值 enumerate(iterable, start=0) iterable 参数表示可迭代对象,start 参数是元素序号的起点,默认为 0。
enumerate 函数的等价形式如下:
def enumerate(sequence, start=0):
n = start
for elem in sequence:
yield n, elem
n += 1
seq = ['P', 'y', 't', 'h', 'o', 'n']
for i, elem in enumerate(seq):
print(i, elem)
2、zip 函数用于同时迭代多个对象 zip(*iterables) *iterable 可以接受任意多个可迭代对象
a = ['**', '**', '**']
b = ['微信公众号', '关注', 'Python高效编程']
c = a
print('#'*20)
for i, j, k in zip(a, b, c):
print(i, j, k)
print('#'*20)
#################### ** 微信公众号 ** #################### ** 关注 ** #################### ** Python高效编程 ** ####################
三、序列属性 序列最大值:max 序列最小值:min 序列的和: sum 序列长度: len 基本用法:向这四个函数中传入序列,可以得到对应属性。
import random
random.seed(21)
seq = [random.randint(0, 100) for i in range(10)]
print(seq)
# [21, 53, 88, 53, 81, 36, 61, 27, 60, 65]
print(max(seq))
# 88
print(min(seq))
# 21
print(sum(seq))
# 545
print(len(seq))
# 10
作为内置函数,可以直接传入生成器(不需要括号)作为参数:
import random
random.seed(21)
num = max(random.randint(0, 100) for i in range(10))
print(num)
# 88
可传入 key 参数,作为比较大小的依据,相当于把序列中每一个元素 item 先传入函数 key 中,将函数返回的数值作为判断对象大小的依据。
def foo(x): return 1. / xmax(seq, key = foo)# 21 对于我们自定义的类型,必须实现特殊方法,才能进行 len 等操作。
__len__ 代表:len 操作 __eq__ 代表:= 操作 __lt__ 代表 < 操作
class foo:
def __init__(self, num, seq):
self.num = num
self.seq = seq
def __len__(self):
return len(self.seq)
def __eq__(self, other):
return self.num == other.num
def __lt__(self, other):
return self.num < other.num
>>> f1 = foo(18, [1, 4, 6])
>>> f2 = foo(21, [1, 7, 9, 10])
>>> f1 < f2
True
>>> f1 > f2
False
>>> f1 == f2
False
>>> f3 = foo(18, [9, 9, 0, 7])
>>> f1 == f3
True
>>> len(f1)
3
>>> len(f2)
4
四、操作序列 1、range 函数生成序列 range(start, stop[, step]) start 可选参数,默认为 0 ,表示序列起点 stop 必选参数,表示序列终点,不包括终点 step 可选参数,序列的步长,默认为 1
>>> range(6)range(0, 6)
>>> list(range(6))
[0, 1, 2, 3, 4, 5]
>>> list(range(0, 6, 2))
[0, 2, 4]
range 函数生成的对象可以迭代,和列表很类似,_ 表示废弃变量(为了避免污染变量环境):
for _ in range(3):
print('Python高效编程')
2、reversed 函数可以将序列逆置 reversed 可以将序列逆置,包括元组、字符串、列表。 对于列表和字符串的逆置,使用 list[::-1] 或者slice()更加方便。
import random
random.seed(21)
seq = [random.randint(0, 100) for i in range(10)]
print(seq)
# [21, 53, 88, 53, 81, 36, 61, 27, 60, 65]
reversed(seq)
print(list(reversed(seq)))
# [65, 60, 27, 61, 36, 81, 53, 88, 53, 21]
字符串逆置:
>>> a = 'Python高效编程'
>>> a[::-1]
'程编效高nohtyP'
>>> ''.join(reversed('Python高效编程'))
'程编效高nohtyP'
3、sorted 函数可以对序列进行排序 sorted(iterable, *, key=None, reverse=False) sorted 不同于 list.sort 操作(原地排序),返回一个新的有序序列,原序列保持不变。 * 表示仅限关键字参数(keyword-only),也就是说,key、reverse 参数只能通过关键字传参,而不能通过位置传参。 reverve 参数表示逆置操作,key 与之前 len 中的 key 参数类似,是函数排序的依据。
>>> sorted([9, 6, 2, 3, 6])
[2, 3, 6, 6, 9]
五、对象属性 dir 函数返回属性列表 id 函数返回对象地址 isinstance 判断对象的类型 type 返回对象的类型
class foo:
pass
>>> dir(foo)
['__class__', '__delattr__', '__dict__', '__dir__',...... '__str__', '__subclasshook__', '__weakref__']
# 创建实例
>>> f = foo()
>>> type(foo)
__main__.foo
>>> isinstance(f, foo)
True
>>> id(f)
2135099584864
六、映射类型 eval 解除引号的束缚 map 应用函数于单个对象 slice 生成切片
1、eval 可以去除字符串的单引号,从而获取引号内部内容。下面的演示展示了,如何使用 eval 函数获取字符串中的字典:
>>> info = '{'name': 'LiHua', 'age': 12}'
>>> eval(info)
{'name': 'LiHua', 'age': 12}
>>> info_dict = eval(info)
>>> type(info_dict)
dict
2、map 将传进来的函数应用于序列中的每一个元素,并返回迭代器。 map(function, iterable, ...) 举例来说,map 就是对 seq 列表中的每一个元素 item 进行 int 操作(int(item))。 匿名函数同理,就是对序列中的每一个元素进行加 2 的操作。
>>> seq = [1.5, 4.5, 9.1]
>>> list(map(int, seq))
[1, 4, 9]
>>> list(map(lambda x: x + 2, seq))
[3.5, 6.5, 11.1]
3、slice 函数为切片操作命名,使得切片操作更加清晰明了。 slice(start, stop[, step]):start 为起点,stop 为终点,step 为步长。 使用该操作,使得截取有规律的文本内容变得很轻松。特别是长文本,使用 slice 函数更加清晰易懂。
参考3:https://zhuanlan.zhihu.com/p/92313012?utm_source=wechat_session
Python常用函数:
print()函数:打印字符串
raw_input()函数:从用户键盘捕获字符
len()函数:计算字符长度
format(12.3654,'6.2f'/'0.3%')函数:实现格式化输出
type()函数:查询对象的类型
int()函数、float()函数、str()函数等:类型的转化函数
id()函数:获取对象的内存地址
help()函数:Python的帮助函数
s.islower()函数:判断字符小写
s.sppace()函数:判断是否为空格
str.replace()函数:替换字符
import()函数:引进库
math.sin()函数:sin()函数
math.pow()函数:计算次方函数
3**4: 3的4次方
pow(3,4)函数:3的4次方
os.getcwd()函数:获取当前工作目录
listdir()函数:显示当前目录下的文件
socket.gethostbyname()函数:获得某主机的IP地址
urllib.urlopen(url).read():打开网络内容并存储
open().write()函数:写入文件
webbrowser.open_new_tab()函数:新建标签并使用浏览器打开指定的网页
def function_name(parameters):自定义函数
time.sleep()函数:停止一段时间
random.randint()函数:产生随机数
range()函数:返回一个列表,打印从1到100
file.read()函数:读取文件返回字符串
file.readlines()函数:读取文件返回列表
file.readline()函数:读取一行文件并返回字符串
ords()和chr(ASCII)函数:将字符串转化为ASCII或将ASCIIIS\转化为字符串
find(s[,start,end])函数:从字符串中查找s
strip()、lstrip()、rstrip()函数:去除空格
split()函数:用什么来间隔字符串
isalnum()函数:判断是否为有效数字或字符
isalpha()函数:判断是否区全为字符
isdigit()函数:判断是否全为数字
lower()函数:将数据改成小写
upper()函数:将数据改成大写
startswith(s)函数:判断字符串是否以s开始的
endwith(s)函数:判断字符串是否以s结尾的
file.write()函数:写入函数
file.writeline()函数:写入文件
s.append()函数:在数据的尾部插入数据
s.insert(3,-1)函数:在3的位置之前插入数据-1
list()函数:将字符串转换成列表
index(value)函数:在数据中查找第一次value的位置
list.extend()函数:将数据的每一个提取出来加入list中
count()函数:统计数据中的某个元素的出现次数
list.remove(“s”)函数:将数据中第一次出现的s删掉
del list[2]函数:将数据的第2个元素删掉
pop()函数:去掉数据的指定位置的数据,有返回值
remove(“ha”)函数:去掉原数据中的“ha”元素
reverse()函数:列表的逆序
isinstance()函数:判断某个数据是否为某种类型
abs()函数:得到某数的绝对值
del x[2]函数:删除列表x中的索引为2的元素
file.sort()函数:对书数据排序
tuple()函数:创建一个元组
find()函数:查找 返回的是索引
join()函数:split的逆操作
{ }:建立字典
dict()函数:创建字典
clear()函数:清楚字典中的所有项
copy()函数:复制一个字典,会修改所有的字典
d.copy()函数:复制一个字典,只会修改当前字典
get()函数:查询字典中的元素
items()函数:将所有的字典返回一个列表
iteritems()函数:与items函数作用相同
popitem()函数:移除字典中的元素
update()函数:用一个字典项更新另一个字典项
pass:什么都不做
exec:执行一段代码
eval:计算Python的表达式
ord()函数:返回单字符字符串的int值
zip(sep1,sep2)函数:创造英语并行迭代的新序列
def hello():自定义函数
import()函数:加载扩展库
参考3:https://www.cnblogs.com/nice107/p/8118876.html
一.常用内置函数: 1.(不用import就可以直接使用)
help(obj) 在线帮助, obj可是任何类型
callable(obj) 查看一个obj是不是可以像函数一样调用
repr(obj) 得到obj的表示字符串,可以利用这个字符串eval重建该对象的一个拷贝
eval_r(str) 表示合法的python表达式,返回这个表达式
dir(obj) 查看obj的name space中可见的name
hasattr(obj,name) 查看一个obj的name space中是否有name
getattr(obj,name) 得到一个obj的name space中的一个name
setattr(obj,name,value) 为一个obj的name space中的一个name指向vale这个object
delattr(obj,name) 从obj的name space中删除一个name
vars(obj) 返回一个object的name space。用dictionary表示
locals() 返回一个局部name space,用dictionary表示
globals() 返回一个全局name space,用dictionary表示
type(obj) 查看一个obj的类型
isinstance(obj,cls) 查看obj是不是cls的instance
issubclass(subcls,supcls) 查看subcls是不是supcls的子类
2.类型转换函数
chr(i) 把一个ASCII数值,变成字符
ord(i) 把一个字符或者unicode字符,变成ASCII数值
oct(x) 把整数x变成八进制表示的字符串
hex(x) 把整数x变成十六进制表示的字符串
str(obj) 得到obj的字符串描述
list(seq) 把一个sequence转换成一个list
tuple(seq) 把一个sequence转换成一个tuple
dict(),dict(list) 转换成一个dictionary
int(x) 转换成一个integer
long(x) 转换成一个long interger
float(x) 转换成一个浮点数
complex(x) 转换成复数
max(...) 求最大值
min(...) 求最小值
3.用于执行程序的内置函数
complie 如果一段代码经常要使用,那么先编译,再运行会更快。
二、和操作系统相关的调用 1.系统相关的信息模块 import sys
sys.argv是一个list,包含所有的命令行参数.
sys.stdout sys.stdin sys.stderr 分别表示标准输入输出,错误输出的文件对象.
sys.stdin.readline() 从标准输入读一行 sys.stdout.write("a") 屏幕输出a
sys.exit(exit_code) 退出程序
sys.modules 是一个dictionary,表示系统中所有可用的module
sys.platform 得到运行的操作系统环境
sys.path 是一个list,指明所有查找module,package的路径.
2.操作系统相关的调用和操作 import os
os.environ 一个dictionary 包含环境变量的映射关系 os.environ["HOME"] 可以得到环境变量HOME的值
os.chdir(dir) 改变当前目录 os.chdir('d:\outlook') 注意windows下用到转义
os.getcwd() 得到当前目录
os.getegid() 得到有效组id os.getgid() 得到组id
os.getuid() 得到用户id os.geteuid() 得到有效用户id
os.setegid os.setegid() os.seteuid() os.setuid()
os.getgruops() 得到用户组名称列表
os.getlogin() 得到用户登录名称
os.getenv 得到环境变量
os.putenv 设置环境变量
os.umask 设置umask
os.system(cmd) 利用系统调用,运行cmd命令
操作举例:
os.mkdir('/tmp/xx')
os.system("echo 'hello' > /tmp/xx/a.txt")
os.listdir('/tmp/xx')
os.rename('/tmp/xx/a.txt','/tmp/xx/b.txt')
os.remove('/tmp/xx/b.txt') os.rmdir('/tmp/xx')
用python编写一个简单的shell
#!/usr/bin/python
import os, sys
cmd = sys.stdin.re#!/usr/bin/python
import os, sys
cmd = sys.stdin.readline()
while cmd:
os.system(cmd)
cmd = sys.stdin.readline()adline()
while cmd:
os.system(cmd)
cmd = sys.stdin.readline()
3.用os.path编写平台无关的程序
os.path.abspath("1.txt") == os.path.join(os.getcwd(), "1.txt")
os.path.split(os.getcwd()) # 用于分开一个目录名称中的目录部分和文件名称部分。
os.path.join(os.getcwd(), os.pardir, 'a', 'a.doc') 全成路径名称.
os.pardir 表示当前平台下上一级目录的字符 ..
os.path.getctime("/root/1.txt") 返回1.txt的ctime(创建时间)时间戳
os.path.exists(os.getcwd()) 判断文件是否存在
os.path.expanduser('~/dir') 把~扩展成用户根目录
os.path.expandvars('$PATH') 扩展环境变量PATH
os.path.isfile(os.getcwd()) 判断是否是文件名,1是0否
os.path.isdir('c:Python26emp') 判断是否是目录,1是0否
os.path.islink('/home/huaying/111.sql') 是否是符号连接 windows下不可用
os.path.ismout(os.getcwd()) 是否是文件系统安装点 windows下不可用
os.path.samefile(os.getcwd(), '/home/huaying') 看看两个文件名是不是指的是同一个文件
os.path.walk('/home/huaying', test_fun, "a.c")
遍历/home/huaying下所有子目录包括本目录,对于每个目录都会调用函数test_fun. 例:在某个目录中,和他所有的子目录中查找名称是a.c的文件或目录。
def test_fun(filename, dirname, names): //filename即是walk中的a.c dirname是访问的目录名称
if filename in names: //names是一个list,包含dirname目录下的所有内容
print os.path.join(dirname, filename)
os.path.walk('/home/huaying', test_fun, "a.c")
三、文件操作 1.打开文件 f = open("filename", "r") r只读 w写 rw读写 rb读二进制 wb写二进制 w+写追加
1.1 读写文件
f.write("a")
f.write(str) 写一字符串
f.writeline()
f.readlines() 与下read类同
f.read() 全读出来
f.read(size) 表示从文件中读取size个字符
f.readline() 读一行,到文件结尾,返回空串.
f.readlines() 读取全部,返回一个list. list每个元素表示一行,包含" "
f.tell() 返回当前文件读取位置
f.seek(off, where) 定位文件读写位置. off表示偏移量,正数向文件尾移动,负数表示向开头移动。where为0表示从开始算起,1表示从当前位置算,2表示从结尾算.
f.flush() 刷新缓存
1.2 关闭文件
f.close()
四、regular expression 正则表达式
import re
1.简单的regexp
p = re.compile("abc")
if p.match("abc") :
print "match"
上例中首先生成一个pattern(模式),如果和某个字符串匹配,就返回一个match object 除某些特殊字符metacharacter元字符,大多数字符都和自身匹配。 这些特殊字符是 。^ $ * + ? { [ ] | ( )
2.字符集合(用[]表示) 列出字符,如[abc]表示匹配a或b或c,大多数metacharacter在[]中只表示和本身匹配。例:
a = ".^$*+?{\|()" 大多数metachar在[]中都和本身匹配,但"^[]"不同 p = re.compile("["+a+"]") for i in a: if p.match(i): print "[%s] is match" %i else: print "[%s] is not match" %i
在[]中包含[]本身,表示"["或者"]"匹配.用[和]表示. ^出现在[]的开头,表示取反.[^abc]表示除了a,b,c之外的所有字符。^没有出现在开头,即于身身匹配。 -可表示范围.[a-zA-Z]匹配任何一个英文字母。[0-9]匹配任何数字。
在[]中的妙用。 d [0-9] D [^0-9] s [ ] S [^ ] w [a-zA-Z0-9_] W [^a-zA-Z0-9_]
表示和tab匹配, 其他的都和字符串的表示法一致 表示和十六进制ascii 0x20匹配 有了,可以在[]中表示任何字符。注:单独的一个"."如果没有出现[]中,表示出了换行 以外的匹配任何字符,类似[^ ].
3.regexp的重复 {m,n}表示出现m个以上(含m个),n个以下(含n个). 如ab{1,3}c和abc,abbc,abbbc匹配,不会与ac,abbbc匹配。 m是下界,n是上界。m省略表下界是0,n省略,表上界无限大。 *表示{,} +表示{1,} ?表示{0,1} 最大匹配和最小匹配 python都是最大匹配,如果要最小匹配,在*,+,?,{m,n}后面加一个?. match object的end可以得到匹配的最后一个字符的位置。
re.compile("a*").match('aaaa').end() 4 最大匹配 re.compile("a*?").match('aaaa').end() 0 最小匹配
4.使用原始字符串 字符串表示方法中用\表示字符.大量使用影响可读性。 解决方法:在字符串前面加一个r表示raw格式。 a = r"a" print a 结果是a a = r""a" print a 结果是"a
5.使用re模块 先用re.compile得到一个RegexObject 表示一个regexp 后用pattern的match,search的方法,得到MatchObject 再用match object得到匹配的位置,匹配的字符串等信息
6.RegxObject常用函数: >>> re.compile("a").match("abab") 如果abab的开头和re.compile("a")匹配,得到MatchObject <_sre.SRE_Match object at 0x81d43c8> >>> print re.compile("a").match("bbab") None 注:从str的开头开始匹配 >>> re.compile("a").search("abab") 在abab中搜索第一个和re_obj匹配的部分 <_sre.SRE_Match object at 0x81d43c8> >>> print re.compile("a").search("bbab") <_sre.SRE_Match object at 0x8184e18> 和match()不同,不必从开头匹配 re_obj.findall(str) 返回str中搜索所有和re_obj匹配的部分. 返回一个tuple,其中元素是匹配的字符串.
7.MatchObject的常用函数 m.start() 返回起始位置,m.end()返回结束位置(不包含该位置的字符). m.span() 返回一个tuple表示(m.start(), m.end()) m.pos(), m.endpos(), m.re(), m.string() m.re().search(m.string(), m.pos(), m.endpos()) 会得到m本身 m.finditer()可以返回一个iterator,用来遍历所有找到的MatchObject. for m in re.compile("[ab]").finditer("tatbxaxb"): print m.span()
8.高级regexp | 表示联合多个regexp. A B两个regexp,A|B表示和A匹配或者跟B匹配. ^ 表示只匹配一行的开始行首,^只有在开头才有此特殊意义。 $ 表示只匹配一行的结尾 A 表示只匹配第一行字符串的开头 ^匹配每一行的行首 Z 表示只匹配行一行字符串的结尾 $匹配第一行的行尾 只匹配词的边界 例:info 只会匹配"info" 不会匹配information B 表示匹配非单词边界 示例如下: >>> print re.compile(r"info").match("info ") #使用raw格式 表示单词边界 <_sre.SRE_Match object at 0x817aa98> >>> print re.compile("info").match("info ") #没有使用raw 表示退格符号 None >>> print re.compile("info").match("info ") <_sre.SRE_Match object at 0x8174948>
9.分组(Group) 示例:re.compile("(a(b)c)d").match("abcd").groups() ('abc', 'b') #!/usr/local/bin/python import re x = """ name: Charles Address: BUPT name: Ann Address: BUPT """ #p = re.compile(r"^name:(.*) ^Address:(.*) ", re.M) p = re.compile(r"^name:(?P<name>.*) ^Address:(?P<address>.*) ", re.M) for m in p.finditer(x): print m.span() print "here is your friends list" print "%s, %s"%m.groups()
10.Compile Flag 用re.compile得到RegxObject时,可以有一些flag用来调整RegxObject的详细特征. DOTALL, S 让.匹配任意字符,包括换行符 IGNORECASE, I 忽略大小写 LOCALES, L 让w W B和当前的locale一致 MULTILINE, M 多行模式,只影响^和$(参见上例) VERBOSE, X verbose模式