python IO编程
学习自廖雪峰https://www.liaoxuefeng.com/wiki/1016959663602400/1017606916795776
一、IO简介
IO在计算机中指Input/Output,也就是输入和输出。由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘、网络等,就需要IO接口。
同步和异步的区别就在于是否等待IO执行的结果。很明显,使用异步IO来编写程序性能会远远高于同步IO,但是异步IO的缺点是编程模型复杂。
注意,本章的IO编程都是同步模式。
二、文件读写
略
三、StringIO和BytesIO
StringIO和BytesIO是在内存中操作str和bytes的方法,使得和读写文件具有一致的接口。
StringIO
很多时候,数据读写不一定是文件,也可以在内存中读写。StringIO顾名思义就是在内存中读写str。
要把str写入StringIO,我们需要先创建一个StringIO,然后,像文件一样写入即可:
1 from io import StringIO 2 3 4 f = StringIO() 5 f.write('hello') 6 print(f.getvalue()) 7 f.write(' ') 8 f.write('world !') 9 print(f.getvalue())
Output:
hello
hello world !
getvalue()
方法用于获得写入后的str。
要读取StringIO,可以用一个str初始化StringIO,然后,像读文件一样读取:
from io import StringIO # f = StringIO() # f.write('hello') # print(f.getvalue()) # f.write(' ') # f.write('world !') # print(f.getvalue()) f = StringIO('Hello!\nHi!\nGoodbye!') while True: s = f.readline() if s == '': break print(s.strip())
Output:
Hello!
Hi!
Goodbye!
BytesIO
StringIO操作的只能是str,如果要操作二进制数据,就需要使用BytesIO。BytesIO实现了在内存中读写bytes,我们创建一个BytesIO,然后写入一些bytes。
from io import BytesIO f = BytesIO() f.write('中文'.encode('utf-8')) print(f.getvalue())
Output:
b'\xe4\xb8\xad\xe6\x96\x87'
请注意,写入的不是str,而是经过UTF-8编码的bytes。
和StringIO类似,可以用一个bytes初始化BytesIO,然后,像读文件一样读取:
from io import BytesIO # f = BytesIO() # f.write('中文'.encode('utf-8')) # print(f.getvalue()) f = BytesIO(b'\xe4\xb8\xad\xe6\x96\x87') print(f.read())
Output:
b'\xe4\xb8\xad\xe6\x96\x87'
StringIO和BytesIO是在内存中操作str和bytes的方法,使得和读写文件具有一致的接口。
四、操作文件和目录
。。。这块先到这。。。有点烦。。。以后再说。嘻嘻,就是辣么随性。。。
优美胜于丑陋(Python 以编写优美的代码为目标)//
明了胜于晦涩(优美的代码应当是明了的,命名规范,风格相似)//
简洁胜于复杂(优美的代码应当是简洁的,不要有复杂的内部实现)//
复杂胜于凌乱(如果复杂不可避免,那代码间也不能有难懂的关系,要保持接口简洁)//
扁平胜于嵌套(优美的代码应当是扁平的,不能有太多的嵌套)//
间隔胜于紧凑(优美的代码有适当的间隔,不要奢望一行代码解决问题)//
可读性很重要(优美的代码是可读的)//
即便假借特例的实用性之名,也不可违背这些规则(这些规则至高无上)//
不要包容所有错误,除非你确定需要这样做(精准地捕获异常,不写 except:pass 风格的代码)//
当存在多种可能,不要尝试去猜测‘而是尽量找一种,最好是唯一一种明显的解决方案(如果不确定,就用穷举法)。虽然这并不容易,因为你不是 Python 之父(这里的 Dutch 是指 Guido )//
做也许好过不做,但不假思索就动手还不如不做(动手之前要细思量)//
如果你无法向人描述你的方案,那肯定不是一个好方案;反之亦然(方案测评标准)//
命名空间是一种绝妙的理念,我们应当多加利用(倡导与号召)//