如何从StringIO对象中删除第一个字符?

5

我在Python文档中无法理解,所以也许我可以在这里问一下:

import StringIO
line = StringIO.StringIO()
line.write('Hello World')

有没有一种方法可以实现对字符串执行类似于 line[1:] 的操作,使得 line.getvalue() 返回 ello World
谢谢。

1
你需要调用 StringIO 来创建一个实例;line = StringIO.StringIO().getvalue() 返回一个字符串,为什么不对进行切片呢? - Martijn Pieters
1
这似乎是一个XY问题;你真正想要解决什么问题呢? - Martijn Pieters
(https://dev59.com/TG445IYBdhLWcg3wR4RN) - Andrew_CS
感谢您编辑错误。我不想切割返回的字符串,而是修改StringIO对象所保存的内容,这样进一步访问它时就会省去第一个字符。我的问题是line[1:]会擦除StringIO的方法,我只对修改getvalue()返回的文本感兴趣。 - VCake
2个回答

5

我无法通过 line.getvalue 实现它,但您可以像普通文件对象一样使用 StringIO 对象。只需将其定位到第一个字节并按照正常方式读取即可。

>>> import StringIO
>>> line = StringIO.StringIO()
>>> line.write("Hello World")
>>> line.seek(0)
>>> print line.getvalue()
Hello World
>>> line.seek(1)
>>> print line.getvalue()
Hello World
>>> line.seek(1)
>>> print next(line)
ello World
>>> line.seek(1)
>>> print line.read()
ello World

1
谢谢!seek()和read()正好符合我的需求。有没有一种方法可以使它每次从下一个字符开始查找,而不使用索引变量?seek(i),i = i + 1... - VCake
@VCake -- 你可以使用 tell 函数来确定当前位置。如果需要从当前位置开始查找,可以使用 seek(1,1) 函数(我想是这样的)。 - mgilson
@mgilson:没错,这是正确的链接:https://docs.python.org/3/library/io.html#io.IOBase.seek(第一个数字是偏移量,也可以是负数;第二个数字表示寻找模式,其中`1`将“当前流位置”设置为“起始点”)——在Python 3.1中添加(但仅适用于BytesIO,而不适用于StringIO:https://dev59.com/questions/NHnZa4cB1Zd3GeqPmSS6) - mozzbozz

2

StringIO的getvalue()函数将内容作为字符串返回,因此可以使用以下代码:

content = line.getvalue()
print content[1:]

切片会复制字符串。 - Cenk Alti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接