IO编程


IO中 Stream是很重要的概念,数据只允许单向流动

InpurStream 输入 外端===》内存

OutputStream输出 内存===》外端

为解决IO中cpu 和 磁盘速度不匹配问题,有两种解决方法:同步IO、异步IO

异步IO性能远远高于同步IO

但是异步IO 的编程模块的复杂度远远高于同步IO

现代操作系统不允许普通程序直接操作磁盘,读写文件时都是程序请求操作系统打开文件对象,然后对文件进行读取数据或者写入数据

读文件

读取文本文件,并且UTF-8编码的文件

  1. 打开

open('文件名','标识符')

f=open('/xx/xx/xx.txt','r') #r表示读

若文件不存在,抛出IOError异常

  1. 读数据

read()方法一次性读取文件的全部数据,读到一个str对象中

f.read()

f.read()调用后,就读取到了文件末尾,在调用read()函数,读到数据为空。

若需要再次读取数据,需要关闭数据流f.close()后 、重新打开文件、然后再读取文件f.read()

  1. 关闭文件

读取文件完毕,必须对关闭数据流

方法:f.close()

  1. 保证正确的关闭文件

文件读写一旦出现错误,后面的f.close()将不会执行。为保证无论是否出错都正确关闭文件,使用try实现

try:
    f=open('/xx/xx/1.txt','r')
    print(f.read())
finally:
    if f:
        f.close()

python 引入with语句 可以自动调用close()方法:

with open('/xx/xx/1.txt','r') as f:
    print(f.read())
  1. 多种读取方法

f.read() 一次性读取完文件

f.read(n) 每次最多读取n个字节,适合循环读取

f.readline() 每次读取一行

f.readlines() 一次读取完,并按行返回到list中

把每行最后的’\n‘去掉

for line in f.readlines():
    print(line.strip())
二进制文件

要读取二进制文件,比如图片,视频,要用rb模式打开

>>> f = open('/Users/michael/test.jpg', 'rb')
>>> f.read()
b'\xff\xd8\xff\xe1\x00\x18Exif\x00\x00...' # 十六进制表示的字节
字符编码

要读取非UTF-8编码的文本,需要制定encoding参数

f=open('/xx/xx/x.txt','r',encoding='gbk')

如果文件中包含一些非法编码的字符,open方法还可以接受一个errors的参数

f=open('xx/xx.txt','r',encoding='gbk',errors='ignore')

errors表示遇到非法编码字符如何处理,最简单的就是忽略。

写文件

写文件和读文件是一样的,唯一区别是open方法的标识符是'w'或者'wb',表示写文件或者写二进制文件

f.open('/xx/xx.txt','w')
f.write('xxxxxx')
f.close()

可以反复的调用f.write()方法对文件进行写入,但是每次都要及时调用f.close()方法

写文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候再慢慢写入。只有调用close()方法时,操作系统才保证把没有写入的数据全部写入磁盘。

同样的可以用with语句保证close()方法的执行:

with open('/xx/xx.txt','w') as f:
    f.write('xxxxx')

要写入非UTF-8文件,需要在open方法中指定编码格式,将字符创转化为指定格式后写入文件:

f=open('/xx/xx.txt','w',encoding='gbk')
f.write('xxxxxx')

当标识符为'w' 时,若文件存在,会把原来的文件覆盖掉。

open 传入标识符 'a' 会以append(追加)的方式写入文件


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值