天蝎网站建设,网站建设需求量大,中信建设有限责任公司怎么样,中英文网站为什么要分开做文章目录1. I/O 编程文件读写StringIO 和 BytesIO操作文件和目录序列化2. 正则表达式进阶re 模块1. I/O 编程
I/O指Input/Output#xff1b;
Input Stream 从外面#xff08;磁盘、网络#xff09;流进内存#xff1b;
Output Stream 从内存流到外面#xff1b;
同步 …
文章目录1. I/O 编程文件读写StringIO 和 BytesIO操作文件和目录序列化2. 正则表达式进阶re 模块1. I/O 编程
I/O指Input/Output
Input Stream 从外面磁盘、网络流进内存
Output Stream 从内存流到外面
同步 I/O CPU 等待I/O完成程序暂停后续执行
异步 I/O CPU 不等待I/O完成先做其他事通过回调或轮询处理I/O后续
文件读写
在磁盘上读写文件的功能都是有操作系统提供的现代操作系统不允许普通程序直接操作磁盘
文件流操作方法
方法说明open()以指定模式打开文件对象参数为文件名和模式标示符可选参数encoding(编码) errors(编码错误处理方式)read()一次读取文件所有内容返回str对象read(size)每次读取size个字节的内容readline()每次读取一行内容readlines()一次读取所有内容并返回以行分割的listwrite()将要写入的内容写入内存缓存当close 被调用时真正将内容写出close()关闭文件关闭前将内存缓存中的内容全部写出
文件对象模式
字符含义r读取默认w写入先 truncate 文件x独占创建如果文件已经存在则失败a写入如果文件已经存在则追加到文件末尾b二进制模型t文字模式默认更新读写
读文件
with open(/Users/aurelius/test.txt, r) as f:print(f.read())with语句可保证open的文件最终会被close同样的功能可以通过try ... finally语句在finally中执行close实现
写文件
with open(/User/aurelius/test.txt, w) as f:f.write(hello, world.)StringIO 和 BytesIO
StringIO
在内存中读写str和读写文件具有一致的接口
from io import StringIO
# InputStream
f StringIO()
f.write(hello)
# 读取写入的 str
f.getvalue()# OutputStream
f StringIO(hello, 中国)
f.read()BytesIO
在内存中读写bytes
from io import BytesIO
# InputStream
f BytesIO()
f.write(中文.encode(utf-8))
print(f.getvalue())# OutputStream
f BytesIO(b\xe4\xb8\xad\xe6\x96\x87)
print(f.read().decode(utf-8))操作文件和目录
Python 内置的os模块可以直接调用系统提供的接口函数操作文件和目录 import osos.name
nt环境变量
os.environ # 全部环境变量 (ClassEnviron)
os.environ.get(key, default) # 指定的环境变量default 可选操作文件和目录
函数作用os.path.abspath(‘.’)当前路径的绝对路径os.path.join(r’d:\a’, ‘b’)把路径 2b拼接到路径 1d:\a上路径 2 若为绝对路径直接返回路径 2os.mkdir(r’d:\test’)创建一个目录os.mkdir(r’d:\test’)删除一个目录os.path.split(r’d:\test\file.txt’)拆分成最后级别目录和文件名os.path.splitext(r’d:\test\file.txt’)拆分下文件扩展名os.rename(‘test.txt’, ‘text.py’)重命名文件os.remove(‘test.py’)删除文件os.listdir(‘.’)列举指定路径os.path.isdir(‘d:\test’)判断是否路径os.path.isfile(‘d:\test\test.txt’)判断是否文件
shutil模块对os功能做了补充其copyfile()提供文件复制功能
序列化
把变量从内存中变成可存储或传输的过程称为序列化pickling把序列化对象重新读到内存里称为反序列化unpickling
Pickle
dumps/dump import pickled dict(name中国人, age18, score99)
# pickle.dumps 把任意对象序列化成 bytespickle.dumps(d)
b\x80\x04\x95*\x00\x00\x00\x00\x00\x00\x00}\x94(\x8c\x04name\x94\x8c\t\xe4\xb8\xad\xe5\x9b\xbd\xe4\xba\xba\x94\x8c\x03age\x94K\x12\x8c\x05score\x94Kcu.
# pickle.dump 直接把对象序列化后写入 file-like Ojbectwith open(dump.txt, wb) as w:
... pickle.dump(d, w)loads/load with open(dump.txt, rb) as r:
... d pickle.load(r)
...d
{name: Aurelius, age: 18, score: 99}pickle反序列化得到的变量与原来的变量完全无关只是值相同而已
pickle序列化只适用于 Python且不同版本彼此不兼容
JSON
序列化的一种标准格式适用于不同编程语言之间传递标准编码使用 UTF-8
JSON 类型关系
JSON 类型Python 类型{}dict[]liststringstrint/floatint/floattrue/falseTrue/FalsenullNoneimport jsond dict(nameAurelius, age18, score99)json_str json.dumps(d)json_str
{name: Aurelius, age: 18, score: 99}json.loads(json_str)
{name: Aurelius, age: 18, score: 99}dumps/dump的ensure_ascii参数可以决定是否统一将返回的str对象编码为ascii字符
JSON 进阶
自定义类的对象不能直接序列化需要实现dumps/dump的default参数对应的方法将该对象转化成dict对象
json.dumps(o, defaultobject2dict)通常class都有__dict__属性存储着实例的变量定义了__solts__除外因此可以直接如此调用
json.dumps(o, defaultlambda o: o.__dict__)loads/load在反序列化自定义类型时也需传入object_hook相应方法将dict对象转化为自定义类型的对象
json.loads(json_str, object_hookdict2object)2. 正则表达式
用一种描述性的语言给字符串定义一个规则用这种规则匹配字符串
描述符作用示例\d匹配数字‘00\d’ 匹配 ‘007’\w字母或数字‘\w\w\d’ 匹配 ‘py3’.任意字符‘py.’ 匹配 ‘pyc’、‘py!’*人一个字符串包括 0 个至少 1 个字符?0 个或 1 个字符{n}n 个字符‘\d{3}’ 匹配 ‘010’{n,m}n ~ m 个字符‘\d{3,8}’ 匹配 ‘1234567’\转义字符‘\d{3}-\d{3,8}’ 匹配 ‘010-12345’\s空格、空位符
进阶
描述符作用示例[]表示范围‘[0-9a-zA-Z_]’ 匹配任意一个数字、字母或下划线A|B匹配 A 或 B^行的开头‘^\d’ 表示以数字开头$行的结束‘\d$’ 表示以数字结束
re 模块
Python 字符串本身用\转义正则表达式也用\转义在拼写正则表达式时使用r前缀可以忽略掉 Python 本身字符串的转义
match import rere.match(r^\d{3}\-\d{3,8}$, 010-12345)
re.Match object; span(0, 9), match010-12345re.match(r^\d{3}\-\d{3,8}$, 010 12345)当匹配成功时返回一个 Match 对象否则返回 None
split re.split(r\s, a b c)
[a, b, c]re.split(r[\s\,\;], a,b;; c d)
[a, b, c, d]通过模式分割字符串返回分割的数组
group m re.match(r^(\d{3})-(\d{3,8})$, 010-12345)m
re.Match object; span(0, 9), match010-12345m.group(2)
12345m.group(1)
010m.group(0)
010-12345通过()提取分组子串group(0)表示匹配的全部字符串group(n)表示第 n 个子串
贪婪匹配
匹配尽可能多的字符 re.match(r^(\d)(0*)$, 102300).groups()
(102300, )re.match(r^(\d)(0)$, 102300).groups()
(10230, 0)正则匹配默认是贪婪匹配想要非贪婪匹配尽可能少匹配在\d后加? re.match(r^(\d?)(0*)$, 102300).groups()
(1023, 00)编译
re模块执行步骤
编译正则表达式不合法则报错用编译后的正则表达式匹配字符串
预编译 import rere_telephone re.compile(r^(\d{3})-(\d{3,8})$)re_telephone.match(010-12345).groups()
(010, 12345)re_telephone.match(010-8086).groups()
(010, 8086)匹配简单邮箱 def is_valid_email(addr):if re.match(r(^[a-zA-Z\.])\(gmail|microsoft)\.com$, addr):return Trueelse:return False匹配带名称邮箱提取名称 def name_of_email(addr):# 提取邮箱前缀m re.match(r^([a-zA-Z\d\s\\])\(voyager|example)\.(org|com)$, addr)if not m:return None# 提取前缀中 里面的名称若不存在则取全名m re.match(r^\([a-zA-Z\s])\[\s][a-zA-Z\d]|([a-zA-Z\d])$, m.group(1))return m.group(1) if m and m.group(1) else m.group(2)上一篇「Python 基础」错误、调试与测试 专栏《Python 基础》
PS感谢每一位志同道合者的阅读欢迎关注、评论、赞 文章转载自: http://www.morning.kdnrp.cn.gov.cn.kdnrp.cn http://www.morning.hpkr.cn.gov.cn.hpkr.cn http://www.morning.kqcqr.cn.gov.cn.kqcqr.cn http://www.morning.txfxy.cn.gov.cn.txfxy.cn http://www.morning.kmldm.cn.gov.cn.kmldm.cn http://www.morning.stprd.cn.gov.cn.stprd.cn http://www.morning.fgppj.cn.gov.cn.fgppj.cn http://www.morning.ppwdh.cn.gov.cn.ppwdh.cn http://www.morning.rmpfh.cn.gov.cn.rmpfh.cn http://www.morning.nfzw.cn.gov.cn.nfzw.cn http://www.morning.ho-use.cn.gov.cn.ho-use.cn http://www.morning.ntqlz.cn.gov.cn.ntqlz.cn http://www.morning.txmkx.cn.gov.cn.txmkx.cn http://www.morning.ghssm.cn.gov.cn.ghssm.cn http://www.morning.qcwrm.cn.gov.cn.qcwrm.cn http://www.morning.xkppj.cn.gov.cn.xkppj.cn http://www.morning.qfmcm.cn.gov.cn.qfmcm.cn http://www.morning.ntzbr.cn.gov.cn.ntzbr.cn http://www.morning.mysmz.cn.gov.cn.mysmz.cn http://www.morning.yxgqr.cn.gov.cn.yxgqr.cn http://www.morning.ndcf.cn.gov.cn.ndcf.cn http://www.morning.jtdrz.cn.gov.cn.jtdrz.cn http://www.morning.ykklw.cn.gov.cn.ykklw.cn http://www.morning.etsaf.com.gov.cn.etsaf.com http://www.morning.bpmnx.cn.gov.cn.bpmnx.cn http://www.morning.wfjyn.cn.gov.cn.wfjyn.cn http://www.morning.zylrk.cn.gov.cn.zylrk.cn http://www.morning.hxmqb.cn.gov.cn.hxmqb.cn http://www.morning.wchcx.cn.gov.cn.wchcx.cn http://www.morning.zgdnz.cn.gov.cn.zgdnz.cn http://www.morning.xdxpq.cn.gov.cn.xdxpq.cn http://www.morning.ggmls.cn.gov.cn.ggmls.cn http://www.morning.krhkn.cn.gov.cn.krhkn.cn http://www.morning.bmmhs.cn.gov.cn.bmmhs.cn http://www.morning.bmtkp.cn.gov.cn.bmtkp.cn http://www.morning.gnghp.cn.gov.cn.gnghp.cn http://www.morning.qyqdz.cn.gov.cn.qyqdz.cn http://www.morning.tfrlj.cn.gov.cn.tfrlj.cn http://www.morning.chehb.com.gov.cn.chehb.com http://www.morning.fdlyh.cn.gov.cn.fdlyh.cn http://www.morning.knswz.cn.gov.cn.knswz.cn http://www.morning.rcrfz.cn.gov.cn.rcrfz.cn http://www.morning.dmwjl.cn.gov.cn.dmwjl.cn http://www.morning.ttkns.cn.gov.cn.ttkns.cn http://www.morning.gkmwx.cn.gov.cn.gkmwx.cn http://www.morning.sbwr.cn.gov.cn.sbwr.cn http://www.morning.dnconr.cn.gov.cn.dnconr.cn http://www.morning.kgslc.cn.gov.cn.kgslc.cn http://www.morning.glswq.cn.gov.cn.glswq.cn http://www.morning.cwcdr.cn.gov.cn.cwcdr.cn http://www.morning.czwed.com.gov.cn.czwed.com http://www.morning.wkqrp.cn.gov.cn.wkqrp.cn http://www.morning.plqkz.cn.gov.cn.plqkz.cn http://www.morning.rtryr.cn.gov.cn.rtryr.cn http://www.morning.mhcys.cn.gov.cn.mhcys.cn http://www.morning.jjhrj.cn.gov.cn.jjhrj.cn http://www.morning.lbxcc.cn.gov.cn.lbxcc.cn http://www.morning.gbfck.cn.gov.cn.gbfck.cn http://www.morning.dmhs.cn.gov.cn.dmhs.cn http://www.morning.gbcxb.cn.gov.cn.gbcxb.cn http://www.morning.xrpjr.cn.gov.cn.xrpjr.cn http://www.morning.yxshp.cn.gov.cn.yxshp.cn http://www.morning.qgjxt.cn.gov.cn.qgjxt.cn http://www.morning.rqxtb.cn.gov.cn.rqxtb.cn http://www.morning.tphjl.cn.gov.cn.tphjl.cn http://www.morning.zqzzn.cn.gov.cn.zqzzn.cn http://www.morning.khpx.cn.gov.cn.khpx.cn http://www.morning.uqrphxm.cn.gov.cn.uqrphxm.cn http://www.morning.lrzst.cn.gov.cn.lrzst.cn http://www.morning.crdtx.cn.gov.cn.crdtx.cn http://www.morning.webife.com.gov.cn.webife.com http://www.morning.wgbmj.cn.gov.cn.wgbmj.cn http://www.morning.rrms.cn.gov.cn.rrms.cn http://www.morning.qnbgh.cn.gov.cn.qnbgh.cn http://www.morning.gqfks.cn.gov.cn.gqfks.cn http://www.morning.cpkcq.cn.gov.cn.cpkcq.cn http://www.morning.xxfxxf.cn.gov.cn.xxfxxf.cn http://www.morning.kfyjh.cn.gov.cn.kfyjh.cn http://www.morning.bprsd.cn.gov.cn.bprsd.cn http://www.morning.wgcng.cn.gov.cn.wgcng.cn