使用StringIO的seek()方法写入时覆盖原有内容的问题求助
问题原因
你遇到的问题核心是StringIO的write操作是覆盖模式,而非插入模式。当你调用seek(0)回到流的起始位置后写入新字符串,新内容会从开头开始逐一覆盖原有内容的对应字符,未被覆盖的剩余原有内容会保留,这就导致输出里出现了被截断的原字符串片段。
解决方案
要在StringIO开头插入内容,需要先读取已有的全部内容,再将新内容与原有内容拼接后重新写入。以下是修改后的代码:
from io import StringIO def pratcise(): intro = StringIO() x = "I study in class 10 and I love Python\n" intro.write(x) # 读取当前所有内容 existing_content = intro.getvalue() # 重置流到开头并清空内容 intro.seek(0) intro.truncate(0) # 写入新内容+原有内容(去掉了y里的换行符以匹配期望输出) y = "My name is Prem Singh " intro.write(y + existing_content) print(intro.getvalue()) if __name__ == "__main__": pratcise()
运行这段代码后,输出会完全符合你的期望:My name is Prem Singh I study in class 10 and I love Python
补充说明
StringIO本身没有原生的插入内容方法,所有写入操作都是覆盖对应位置的字符。如果处理超大文本,这种拼接方式可能存在效率问题,但对于常规场景完全适用。
内容的提问来源于stack exchange,提问作者Kadha
相关产品推荐
相关产品推荐

