Discuss / Python / 有关使用stringIO读写文件有个问题

有关使用stringIO读写文件有个问题

Topic source

会覆盖,想问下从倒数开始seek要怎么做?

1楼很厉害

from io import StringIO
f = StringIO("1\n2\n3")
f.write("4\n 5\n 6")
f.seek(0)
while True:
    s = f.readline()
    if s == "":
        break
    print(s.strip())
print(f.getvalue())

结果

4
5
6
4
5
6

simpen丶

#25 Created at ... [Delete] [Delete and Lock User]
>>> from io import StringIO
>>> f = StringIO("1\n2\n3")
>>> f.write("4\n 5\n 6")
7
>>> f.getvalue()
'4\n 5\n 6'
>>> f.tell()
7
>>>

先初始化,后再 write() 的话其实是把之前的内容清除了再写入,此时用 f.getvalue() 只得到后面写入的值。

我是小九_

#26 Created at ... [Delete] [Delete and Lock User]

回 10# 个人理解是 write的把初始构造的给覆盖了。

沢田小轩

#27 Created at ... [Delete] [Delete and Lock User]

回复@xigaohu: 因为

f = StringIO("1\n2\n3")

游标会返回第0处。

f.write("4\n 5\n 6")

会从第0处开始覆盖。

这里的stream position 可不可以理解为文件指针类似地东西呢?写进去东西后,指针位于末尾,所以读取的是空字符串,只有把指针调到开头时,才能读取写进的东西。

儒生脱尘

#29 Created at ... [Delete] [Delete and Lock User]

27楼理解的不错

直接write()应该是会清空原有内容,重新写进去的吧, seek()后再使用write(),是从seek()的位置开始写的,是这样理解的吧

from io import StringIO;

f = StringIO(); f.write('Hello World'); f.seek(0) #涉及到文件指针位置,加上这句在trytry s = f.read(); print(s);


Reply