【问题标题】:How can i remove the first character from a StringIO object?如何从 StringIO 对象中删除第一个字符?
【发布时间】:2013-06-21 13:17:01
【问题描述】:

我无法通过 Python 文档弄清楚,所以也许我可以在这里问:

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

有什么方法我可以使用,可以做line[1:] 对字符串做的事情, 所以line.getvalue() 会返回ello World

谢谢。

【问题讨论】:

  • 您需要调用StringIO创建实例; line = StringIO.StringIO().getvalue() 返回一个字符串,为什么不切片 that
  • 这闻起来像XY Problem;你想解决什么,真的
  • 感谢编辑错字。我不想对返回的字符串进行切片,而是修改 StringIO 对象所包含的内容,因此进一步访问它是没有第一个字符的。我的问题是 line[1:] 会删除 StringIO 的方法,我只对修改 getvalue() 将返回的文本感兴趣。

标签: python python-2.7


【解决方案1】:

我不知道如何使用line.getvalue 来实现,但您可以像使用普通文件对象一样使用 StringIO 对象。只需寻找字节 1 并像往常一样读取。

>>> 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

【讨论】:

  • 谢谢! seek() 和 read() 正是我需要的。有没有办法让它每次都从下一个字符开始而不使用索引变量?寻找(i), i = i + 1...
  • @VCake -- 您可以使用tell 确定您当前的位置。你可以通过seek(1,1)从当前位置找(我觉得)
  • @mgilson:是的,没错:docs.python.org/3/library/io.html#io.IOBase.seek(第一个数字是偏移量,也可以是负数;第二个数字表示搜索模式,其中1 设置“当前流位置”作为“起点”)——在 Python 3.1 中添加(但它仅适用于 BytesIO,不适用于 StringIO:stackoverflow.com/questions/19981996/…
【解决方案2】:

StringIO getvalue() 函数将内容作为字符串返回,所以这是可行的:

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

【讨论】:

  • 切片复制字符串。
猜你喜欢
  • 2011-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-18
  • 2019-11-12
  • 2020-03-10
  • 1970-01-01
相关资源
最近更新 更多