Python内置模块:io、file、json、csv
一、ioStringIO - 文本字符串的缓冲区fromioimportStringIO# 创建StringIO对象sioStringIO()# 空缓冲区sioStringIO(initial text)# 带初始数据# 常用方法sio.write(Hello )# 写入字符串返回字符数sio.write(World!)sio.getvalue()# Hello World! 获取全部内容sio.seek(0)# 移动指针到开头sio.read()# Hello World! 读取全部sio.read(5)# Hello 读取5个字符sio.readline()# 读取一行sio.readlines()# 读取所有行返回列表sio.close()# 关闭流# 使用上下文管理器withStringIO(data)asf:contentf.read()BytesIO - 二进制数据的缓冲区fromioimportBytesIO# 创建BytesIO对象bioBytesIO()# 空缓冲区bioBytesIO(bbinary data)# 带初始字节数据# 常用方法bio.write(bHello )# 写入字节bio.write(bWorld!)bio.getvalue()# bHello World!bio.seek(0)bio.read()# bHello World!bio.read(5)# bHello缓冲I/O方法fromioimportBytesIO,BufferedReader,BufferedWriter# 包装原始流rawBytesIO(bdata)readerBufferedReader(raw)reader.read(10)# 读取10字节reader.read1(10)# 最多读取10字节不多次调用reader.peek(5)# 预览5字节不移动指针reader.readinto(b)# 读取到字节数组中# 写入缓冲writerBufferedWriter(BytesIO())writer.write(bdata)writer.flush()# 确保数据写入底层流组合使用fromioimportTextIOWrapper,BytesIO# 将字节流包装为文本流byte_streamBytesIO(bhello world)text_streamTextIOWrapper(byte_stream,encodingutf-8)text_stream.read()# hello world# 检查流类型fromioimportIOBaseisinstance(byte_stream,IOBase)# 检查是否为I/O流二文件 file2.1 文件读写模式r以读方式打开文件文件的指针将会放在文件的开头默认模式。w打开一个文件只用于写如果文件不存在自动创建从第一行开始写如果文件存在则先清空再从第一行写。a打开一个文件用于追加如果文件已存在则将会在文件的末尾处写入新数据如果不存在则自动创建可以使用\n来标识换行。b表示二进制在读图片或者写图片等通常使用rb或者wb模式。 更新既可以读也可以写2.2 常用API# 打开文件, type(f) class _io.TextIOWrapperfopen(文件名,modew,encodingUTF-8)# 写内容f.write(Hello22222)# 一次写多行内容f.writelines([第一行内容,第二行内容])# 将内存中的数据刷新到磁盘f.flush()# 关闭文件占用会自动调用flush()f.close()#读几个字符f.read(2)#光标移动到第5个索引后面f.seek(5)#读取光标所在的行f.readline()#读取剩下的所有行每一行都作为list的元素readlines会读取到每行结尾的换行符\nf.readlines()#一次读取剩下所有内容f.read()2.3 示例type(f) class _io.TextIOWrapper该类实现了迭代器所以可以通过for循环来使用每次读一行数据。with as语法相当于自动在finally中执行了f.close()保证异常情况下也能关闭文件。with as相当于jdk8中的try () { }语法。# f在try里面算是全局变量所以在finally中还可以使用这如果是其它语言还要把f单独作为一行代码写在外边有点不优雅try:fopen(a.txt,moder,encodingUTF-8)finally:f.close()withopen(a.txt,moder,encodingUTF-8)asf:forlineinf:print(line)将字典写入文件中。importjson user_dict{username:虚竹,age:30}withopen(data.json,w,encodingutf-8)asf:json.dump(user_dict,f,ensure_asciiFalse)三、json字典与json字符串dumps将字典转为json字符串dict - str。loads将字符串转为字典对象str - dict。字典与文件dump将字典写入文件dict - file。load将file转为字典file - dict。importjson# 对象转json字符串, json中有中文需要关闭ensure_asciiuser{id:1,username:admin,name:张无忌}user_jsonjson.dumps(user,ensure_asciiFalse)# json字符串转对象user_objjson.loads(user_json)将字典写入文件中。importjson user_dict{username:虚竹,age:30}withopen(data.json,w,encodingutf-8)asf:json.dump(user_dict,f,ensure_asciiFalse)withopen(data.json,r,encodingutf-8)asf:user_dict2json.load(f)四、csvimportcsv#写withopen(csv_data/02.csv,w,encodingutf-8,newline)asf:writercsv.DictWriter(f,fieldnames[姓名,年龄,性别,爱好])writer.writeheader()# 写入表头writer.writerow({姓名:小王年龄:18,性别:男爱好:football,Java})#写入数 据writer.writerow({姓名:小李年龄:18性别:女爱好:Python})writer.writerow({姓名:小张,年龄:18,性别:男,爱好:C})writer.writerow({姓名:涛哥年龄:19,性别:男爱好:Python,Java}#读withopen(csv_data/02.csv,r,encodingutf-8)asf:readercsv.DictReader(f)forrowinreader:print(row)