StringIO and BytesIO
Topic source讲得很清楚,例子很棒,只是我完整执行代码的时候报错如下:
sio.write(s)
TypeError: string argument expected, got 'list'
我用以下代码将list合并后,执行通过:
sio.write(reduce(lambda x,y: x+y,s))
我试着总结一下吧,也不知道对不对,希望大家各抒己见
from io import StringIO
# 初始化一个StringIO对象
s_write = StringIO()
s_init = StringIO("初始化代码")
# 查看初始指针位置
print("s_write初始指针位置:", s_write.tell())
print("s_init初始指针位置:", s_init.tell())
print()
# 写入一些内容到s_write中
s_write.write("Hello,World!")
print("s_write当前指针位置:", s_write.tell())
print("s_init当前指针位置:", s_init.tell())
print()
# 查看获取值之后的指针位置
s_write.getvalue()
s_init.getvalue()
print("s_write当前指针位置:", s_write.tell())
print("s_init当前指针位置:", s_init.tell())
print()
# 读取内容
content = s_write.read()
content1 = s_init.read()
# 查看读取的内容和指针位置
print("sio读取后的指针位置:", s_write.tell())
print("s_init读取后的指针位置:", s_init.tell())
用户5609668512
大家把python3 seek这个用法完全学会就知道为什么了,https://www.runoob.com/python3/python3-file-seek.html。
为什么会出现数据写入后结果却出不来?做个不太恰当的类比,好比我们 2X50 米赛跑,摄像头(seek)的位置不是放置在起点开始记录而是放置在在50米处,这也就意味着当交接棒时第一棒运动员跑得过程是没被记录的,好巧不巧摄像头兼职教练员,这时他会以为“你前面50米没跑所以不算数,0分”,实际上是摄像头(seek)自己所处位置的原因,只有把摄像头放回起点位置开始记录(记录过程就是 for...in...),才能取到一个正确的成绩