Python的IO操作

io模块提供python处理各种I/O的主要工具。有三种主要的I/O类型:Text I/O、Binary I/O和Raw I/O。属于这些类别的对象通常称为流。Raw I/O通常用作二进制和文本流的低级构建块,很少拿来直接操作,在此不再赘述。

磁盘上读写文件的功能是由操作系统提供的,现代操作系统不允许普通程序直接操作磁盘。读写文件是请求操作系统打开一个文件对象(文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据,或者把数据写入这个对象文件。

Text I/O

读文件

打开一个文件:

f = open("file.txt", "r", encoding="utf-8")   

‘r’表示读,encoding表示将字符串转换为指定编码。打开文件后,读取文件:

f.read()  

read()方法会一次性将文件中的文本都读取出。运行结果如下:

hello
how are you
I'm fine

我们还可以读取每行的数据。

f.readlines()   

结果为:

['hello\n','how are you\n',"I'm fine"]

可以看到的是,readlines()函数返回的是一个列表,列表元素就是每行的数据。当然我们还可以循环调用readline()方法,它每次只返回一行的数据。

读取完文件后,需要关闭文件。

f.close()  

需要特别注意的是,文件使用完后一定要关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是一定的。

当文件读且报错时,close()方法不会调用。我们当然会想到使用try…finally的方法保证文件一定会关闭。但是这种方法还是有点麻烦,我们通常使用如下方法:

with open("file.txt", "r", encoding="utf-8") as f:
	print(f.read())   

不用调用close()方法也会将文件关闭。

写文件

写文件和读文件类似。

with open("file.txt", "w", encoding="utf-8") as f:
	f.write('thank you')  

使用‘w’表示读。然后调用write()方法对文件进行写操作。

Binary I/O

二进制I/O产生一个bytes对象,这类流通常用于各种非文本数据,它的操作方式和Text I/O类似,只不过读取方式和写入方式分别为‘rb’和‘wb’。

f = open("myfile.jpg", "rb")   

内存中二进制流可使用BytesIO对象:

>>> b = io.BytesIO(b"abcdef")
>>> view = b.getbuffer()
>>> view[2:4] = b"56"
>>> b.getvalue()
b'ab56ef'   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值