StringIO
很多时候数据读取不一定是文件,也可以在内存中
StringIO顾名思义就是在内存中读写str
要把str写入StringIO,我们需要先创建一个StringIO,然后像文件一样写入即可:
from io import StringIO
f = StringIO()
f.write('Hello')
f.write(' ')
f.write('Word')
print(f.getvalue())
#getvalue()方法用于获得写入的str
要读取StringIO,可以用一个str初始化StringIO,然后,像读文件一样读取:
f = StringIO('Hello!\nHi!\nGoodbye!')
while True:
s = f.readline()#每行读取
if s == '':#当读取到空
break#终止读取
print(s.strip())#strip()去掉首尾空格
BytesIO
StringIO操作的只能是str,如果要操作二进制数据,就需要使用BytesIO。
BytesIO实现了在内存中读写bytes,我们创建一个BytesIO,然后写入一些bytes:
from io import BytesIO
f = BytesIO()
f.write('中文'.encode('utf-8'))#写入的是经过utf-8编码的bytes
print(f.getvalue())
和StringIO类似,可以用一个bytes初始化BytesIO,然后,像读文件一样读取:
f = BytesIO(b'\xe4\xb8\xad\xe6\x96\x87')
print(f.read())
注意事项
指针:可以理解为windows操作界面,操作一个文件时候,比如一个txt文件,鼠标的光标所在的位置
f = StringIO('abc')#第一次初始化
print(f.getvalue())
f = StringIO('asd')#第二次初始化
print(f.getvalue())
可以看出来两次值是不一样的,在初始化的时候,是覆盖原值的,指针永远指向0,也就是文件开头位置
f = StringIO()
f.write('aaa')#第一次写入
print(f.getvalue())
f.write('bbb')#第二次写入
print(f.getvalue()
可以看出来,第二次的值是第一次加上第二次,所以write()方法本质是追加
第一次write的时候,指针是在输入内容后面的
f = StringIO('xxxxxxx')#第一次初始化
print(f.getvalue())
f = StringIO('bbbbbbb')#第二次初始化
print(f.getvalue())
f.write('vvvvvv')#第一次写入
print(f.getvalue())
f.write('nnnnnn')#第二次写入
print(f.getvalue())
通过打印结果可以看出,第一次写入的时候,因为初始化之后的指针是在文件开头的,所以还是覆盖了,但是因为write写入的内容比上一次初始化的内容少,所以还有个b保留了下来,第二次写入的时候因为指针已经在最后面了,所以追加了写入内容
f = BytesIO(b'aaaabbbbcccc')
print(f.read())
print(f.read())
print(f.getvalue())
print(f.getvalue())
getvalue()方法是不管指针在哪,读取所有内容,而file-like Object中的read(),readline(),readlines()方法是需要根据指针所在来进行读取的,所以第一次使用read读取完了之后,光标在文件末尾,所以再次读取,自然读取不到东西
f = BytesIO()
f.write(b'asfsgsgs')
print(f.read())
print(f.getvalue())
同样的道理,因为write()方法写入内容后,指针是在文件末尾的,所以用read()等方法是无法读取到数据的
所以上面两个例子如果想要用read()来读取,需要使用seek()方法改变指针位置
tell()可以获取当前指针所在位置
给上面两个例子加上f.seek(0,0)回到文件开头,就能用read()读取到了
上面所有注意事项在StringIO和BytesIO通用
除了seek()方法第一次参数为负数,负数表示向前移动,只能在BytesIO中使用
文章来源: 松勤网
-
繁体字网名设计 好听个性名字 qq飞车网名 适合生日发朋友圈的句子 难过的词语 昵称女生 岁岁年年的唯美句子 双字网名 忏悔自己错误的句子 大学学习总结 运动会标语 逆风飞翔 平安就好的说说 优秀毕业生主要事迹 垃圾分类的好处 不懂你的人的说说句子 打动女生情话 一路走好天堂安息句子 说课稿模板 网名古风 鸡蛋浮起来的实验作文 个人缺点 中考加油励志语 容易涨粉的抖音名字 追求完美的句子 默默牵挂一个人的说说 疫情防控应急预案 形容桂花香的优美句子 气势磅礴的诗句 餐饮文案走心的句子(0) 回复 (0)
-
讨债公司/蓝月传奇辅助/蓝月辅助(0) 回复 (0)