邯郸网站制作基本流程秦皇岛手机网站建设
类、文件操作、正则表达式
- 1. 类
- 2. 文件操作
- 3. 正则表达式
1. 类
类是用来描述具有相同的属性和方法的集合,定义了该集合中每个对象共有的属性和方法,对象是类的实例,可以调用类的方法。
定义类时,如有父类,则写在类名后面的括号里。如果没有继承任何其他父类,默认父类为object。靠继承进行子类化是创建和定制新类类型的一种方式,子类继承基类的属性,如果子类重写基类构造器,基类构造器就不会被调用(否则被调用),基类构造器必须显式写出才会被执行。
类里定义函数,第一个参数必须是self,代表实例对象本身;__init__函数,在新对象实例化时会自动运行,用于给新对象赋初值,不应当返回任何对象;类内定义函数时,如调用自身或父类的函数与变量,应使用self.函数名或self.变量名。
混合记法(mixedCase) 或 骆驼记法(camelCase) :
- 类名通常由大写字母打头(如"AddrBookEntry",“RepairShop”)
- 数据属性使用名词作为名字(如"name", “phone”,“email”)
- 方法使用谓词(动词加对象, 如"updateEmail"),Python规范推荐使用骆驼记法的下划线方式,如"update_email" 。
Python使用以下编码方式进行访问控制:
- 单下划线(
_foo):表示protected变量,只允许其本身与子类访问,不能用于from module import * - 双下划线(
__foo):表示private变量,只允许这个类本身访问。 - 头尾双下划线(
__foo__):定义的是特列方法,类似__init__()。
issubclass() 判断一个类是否另一个类的子类或子孙类
isinstance() 判断一个对象否另一个给定类的实例
特殊类属性:
name 类的名字(字符串)
doc 类的文档字符串
bases 类的所有父类构成的元组
dict 类的属性(返回一个字典,keys是属性名,values是相应属性对象的数据值)
module 类定义所在的模块
class 实例对于的类
e.g.
定义类AddrBookEntry
class AddrBookEntry(object):def __init__(self,id,nm,ph):self.empid = idself.name = nmself.phone = phprint('Create instance for:', self.name)def updatePhone(self,newph):self.phone = newphprint('Update phone for:',self.name)
john = AddrBookEntry(1,'John Doe','408-555-1212')
print(john.name)
print(john.phone)
输出
Create instance for: John Doe
John Doe
408-555-1212
john.updatePhone('415-555-1212')
print(john.phone)
输出
Update phone for: John Doe
415-555-1212
定义类EmplAddrBookEntry
class EmplAddrBookEntry(AddrBookEntry):def __init__(self,id,nm,ph,em):AddrBookEntry.__init__(self,id,nm,ph)self.email = emdef updateEmail(self,newem):self.email = newemprint('Update email address for:', self.name)
john = EmplAddrBookEntry(1,'John Doe','408-555-1212','john@python.org')
print(john.email)
输出
Create instance for: John Doe
john@python.org
john.updateEmail('john@java.org')
print(john.email)
输出
Update email address for: John Doe
john@java.org
2. 文件操作
使用BIF opne()/file(),打开文件(默认以读方式,若文件含有汉字可使用encoding=‘utf-8’),返回一个文件对象。文件对象访问模式,默认值为’r’
(1)文件对象的访问模式
| 文件模式 | 操作 |
|---|---|
| r | 只读模式 |
| w | 只写模式,创建新文件 |
| a | 追加模式(若文件不存在,则创建一个) |
| r+ | 读写模式 |
| w+ | 读写模式 |
| a+ | 读写模式 |
| rb | 二进制读模式 |
| wb | 二进制写模式 |
| ab | 二进制追加模式 |
| rb+ | 二进制读写模式 |
| wb+ | 二进制读写模式 |
| ab+ | 二进制读写模式 |
(2) 文件对象的方法
read()读取文件到字符串,如果未给定size参数(默认-1)或size值为负数,将读取整个文件。
readlines()读取文件的所有(剩余)行,返回一个字符串列表(行列表)。
readline()从一个打开的文件每次读取一行数据,将整行(含行结束符)作为字符串返回。如果未给定size参数(默认-1)或size值为负数,读取至行结束符。当没有足够内存可以一次读取整个文件时,使用readline()。
write()将字符串写入文件
seek()方法可以将文件"退回"到起始位置
flush()清除内部I/O缓存,并将数据强行写会磁盘
close()方法关闭一个之前打开的文件
3. 正则表达式
(1) 常用特殊符号
. 任意单个字符
^ 匹配字符串开头
$ 匹配字符串结尾
* 前一个字符0次或无限次扩展 abc* 可以是ab/abc/abcc/abccc
+ 前一个字符1次或无限次扩展 abc+ 可以是abc/abcc/abccc
? 前一个字符0次或1次扩展 abc? 可以是ab/abc
| 左右表达式任意一个 abc|def 表示abc或def
{m} 扩展前一个字符m次 ab{2}c表示 abbc
{m,n} 扩展前一个字符m至n次(含n)ab{1,2}c表示 abc/abbc
[ ] 对单个字符给出取值范围
[abc] 表示a,b,c中的一个 [a-z]表示a到z单个字符
[^] 对单个字符给出排除范围 [^abc ] 非a或b或c的单个字符
() 分组标记,内部只能用|
\d 数字,等价于[0-9]
\w 单词字符,等价于[A-Za-z0-9_]
e.g.
^[A-Za-z]+$ 26个字母组成的字符串
[A-Za-z0-9]+$ 26个字母和数字组成的字符串
[\u4e00-\u9fa5] 中文字符
^[\u4E00-\u9FA5]{2,4} 2-4个汉字
(2) re模块
match():从字符串开始位置对模式进行匹配。匹配成功,返回一个Match对象;匹配失败,返回None。
search():从字符串任意位置的地方,对模式进行匹配。匹配成功,返回一个Match对象;匹配失败,返回None。
findall():返回全部匹配对象的列表
split():根据正则表达式的分隔符吧字符串分割为一个列表,并返回
匹配对象主要有以下两个方法:
group():返回全部匹配对象,或特定subgroup,如group(0)groups():返回一个包含全部匹配的subgroup的元组(如果没有成功匹配,返回一个空元组)
函数式用法:一次性操作
import re
rst = re.search(r'[1-9]\d{5}','TEST 1000191')
面向对象用法:编译多次操作
pat = re.compile(r'[1-9]\d{5}')rst = pat.search('TEST 1000191')
