Python学习笔记之python IO编程

/ 0评 / 0

同步IO和异步IO

读写文件

with语句自动调用close()方法,with简化try...except...finally的处理流程,通过__enter__方法初始化,然后在__exit__中做异常处理或资源释放

with open("1.txt", "r") as f:
    print(f.read())
read()
read(size)
readline()

line.strip()把结尾的"\n"去掉

可以处理file-like-object

读取二进制文件:open("1.jpg", "rb")

处理字符编码:encoding="utf-8", errors="ignore"

写文件:open("1.txt", "wa"),a:append,以追加方式写入

使用with语句操作文件io

StringIO:在内存中读写str

BytesIO:在内存中读写bytes

操作文件或目录

import os
os.environ
os.name

os.path:操作路径
os.path.abspath(".") # 绝对路径
os.path.join("", "") # 生成完整路径,根据不同的操作系统环境插入不同的分隔符,不要使用拼接字符串的方式
os.path.split("") # 拆分最后一级文件或目录名
os.path.splitext("") # 得到文件后缀
os.path.exists() # 判断文件或文件夹是否存在
os.path.basename() # 文件名(有后缀)或文件夹名
os.path.dirname() # 文件所在文件夹路径

os.mkdir() # 创建文件夹
os.rename() # 重命名
os.remove() # 删除
os.listdir() # 列出当前目录下所有文件和目录

序列化

把变量从内存中变成可存储或传输的过程称为序列化

python中叫pickling,使用pickle模块来实现序列化

pickle.dump()
pickle.load(f)

json模块可以实现python对象和json对象的转换

json.dump()
json.loads()

def student2dict(std):
    return {
        "name": std.name,
        "age": std.age
    }

json.dump(s, default=student2dict)

def dict2student(d):
    return student(d["name"], d["age"])
json.loads(stu_str, object_hook=dict2student)