欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python语法备忘(I)

程序员文章站 2022-07-01 18:08:27
...

1.读写文件

Python语法备忘(I)

#读文件
try:
    f = open(filename,'r')
    print f.read()
finally:
    if f:
        f.close()
#按行来读
for line in f.readlines():
    print line
#用with
with open(filename,'r') as f:
    print f.read()
#写
f.write(str)    

#文件还有一个__next__()方法,每次返回文件中的下一行
#这种是读取文本文件的最佳方式,因为不是一次性把文件加载到内存中
for line in open('data.txt'):
    print(line,end='')

2.命名空间LEGB法则

命名空间—-对变量的分组划分
python中一切皆对象,c++中的变量名是内存地址的别名,而python中的变量名其实是一个字符串对象。
命名空间实际上是一个字典,{name:object}保存了变量名称到对象之间的映射关系。
LEGB规则规定了查找一个名称的顺序:local–>enclosing–>global–>build-in

Local–函数内的命名空间
Enclosing function locals–外部嵌套的函数的命名空间
Global–函数定义所在的模块的命名空间
Build-in–python内置模块的命名空间

3.异常处理机制

(1)try..except..finally..else

try:
    input = open(filepath,'r')
except Exception as e:#出现异常
    print e
else:#未出现异常
    print input.read()
finally:#始终执行
    f.close()

(2)with.. as

with open(filename,'r') as f:
    f.read()

上下文管理器,有enter(),exit()方法。发生异常则调用默认的异常处理器处理
(3)assert

assert expression

表达式为True,则继续执行
表达式为False,则中断程序,调用默认的异常处理器

4.正则表达式

参考:
python正则表达式指南
正则表达式入门
(1)正则表达式匹配流程
Python语法备忘(I)
(2)正则表达式语法
Python语法备忘(I)
(3)python re模块
示例:

import re

key = "hello,world" #源字符串
p1 = r"hello" #正则表达式
pattern = re.compile(p1)#正则表达式编译为pattern对象
match = pattern.match(key)#匹配字符串
if match:
    print match.group() #获得匹配的分组

#也可以写成,缺点是pattern没法复用
re.match(r'hello', 'hello world!')

re.compile(strPattern[, flag]) — 用于将正则表达式字符串编译为pattern对象
第二个参数flag是匹配模式,比如re.compile(‘pattern’, re.I | re.M)

pattern对象
pattern对象是一个编译好的正则表达式
方法:
match(string[, pos[, endpos]]) | re.match(pattern, string[, flags]):
是否在字符串刚开始的位置匹配。注意:这个方法并不是完全匹配。当pattern结束时若string还有剩余字符,仍然视为成功。想要完全匹配,可以在表达式末尾加上边界匹配符’$’。

search(string[, pos[, endpos]]) | re.search(pattern, string[, flags]):
字符串内查找模式匹配,只要找到第一个匹配然后返回;如果字符串没有匹配,则返回None。
pos和endpos的默认值分别为0和len(string));re.search()无法指定这两个参数

re.findall(pattern, string[, flags])
遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表

re.match与re.search与re.findall的区别:

re.match**只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;re.search匹配整个字符串,直到找到一个匹配**。
re.findall遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表

Match对象
match对象是一次匹配的结果,包含了很多关于此次匹配的信息
属性:
string–匹配时使用的字符串
re–pattern对象
pos–字符串中pattern开始搜索的索引
endpos–结束搜索的索引
lastindex–最后一个被捕获的分组的索引
lastgroup–最后一个被捕获的分组的别名
方法:
group([group1, …]):
获得一个或多个分组截获的字符串;指定多个参数时将以元组形式返回。group1可以使用编号也可以使用别名;编号0代表整个匹配的子串;不填写参数时,返回group(0);没有截获字符串的组返回None;截获了多次的组返回最后一次截获的子串。