Python IO编程 01 文件读写、StringIO、BytesIO

在IO编程中,存在速度严重不匹配的问题(CPU和内存的速度与外设的速度不同)。 解决方法:

  • 同步IO: CPU等待,程序暂停执行后续代码,等读写完成再执行。
  • 异步IO: CPU不等待,后续代码接着执行。

1 文件读写

1.1 读文件
# 读文件

# 1 打开文件对象,如果文件不存在,会抛出异常信息
f=open('/Users/Mac/mydata/iotest.txt','r') # 'r'表示读

# 2 读取文件中的全部内容
str=f.read()
print(str)

# 3 关闭资源
f.close()
# 加上 try catch 写法:
try:
    f = open('/Users/Mac/mydata/iotest.txt', 'r')  # 'r'表示读
    print(f.read())
finally:
    if f:
        f.close()
# 简便写法,不需要调用close()方法,会捕获异常
with open('/Users/Mac/mydata/iotest.txt','r') as f:
    print(f.read())

读取方法:

  • read(),一次性读取所有内容。
  • read(size),每次最多读取size个字节的内容,在不能确定文件大小的时候用。
  • readline(),每次读取一行内容。
  • readlines(),一次读取所有内容并按行返回list,读取配置文件时使用。
with open('/Users/Mac/mydata/iotest.txt','r') as f:
    for line in f.readlines():
        print(line.strip()) # strip()把末尾的'\n'去掉

open()方法中其他参数:

f1=open('path','rb',encoding='gbk',errors='ignore')
# 'rb':打开文件模式,此为读取二进制文件,例如:图片
# encoding:给定字符编码,读取指定编码的文件,默认为utf-8
# errors:遇到编码错误后的处理
1.2 写文件
'''
    写文件时,操作系统通常不会立刻将数据写入到硬盘,而是放到内存中缓存起来,空闲的时候再写。
    只用调用close()方法时,操作系统才会保证把没有写入的数据全部写入到硬盘中。
'''
with open('/Users/Mac/mydata/iotest.txt','w') as f:
    f.write('hello hello.')
# 'w' 模式会覆盖掉文件中原有的内容,使用'a'来实现追加写入
with open('/Users/Mac/mydata/iotest.txt','a') as f:
    f.write('hello hoython.')

2 StringIO 和 BytesIO

2.1 StringIO

很多时候,数据读写不一定是文件,也可以在内存中进行读写。

StringIO,就是在内存中读写str

from io import StringIO
# 1 把str写入
f=StringIO()
f.write('hello world.\n hello python.\n hello world.')

# 获取写入后的str
print(f.getvalue())

# 2 读取str
s=f.readlines()
for str in s:
    print(str)
2.2 BytesIO

BytesIO,操作二进制文件。

from io import BytesIO
# 创建对象
f=BytesIO()
# 写入内容
f.write('中文'.encode('utf-8'))
# 获取写入的值
print(f.getvalue())

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值