Python 2.7 在Python文本流中搜索和替换行

Python 2.7 在Python文本流中搜索和替换行,python-2.7,stream,Python 2.7,Stream,我正在尝试用Python解析文本流。逐行检查内容,匹配后,将给定的行传递给函数进行处理 处理正在进行,函数返回预期结果。但是,我无法用新行更新原始流——目的是用函数返回的“text”值替换匹配的行 我使用的代码如下所示: import StringIO for line in StringIO.StringIO(data): if line.startswith('MATCHTHIS'): meta, text = parse_data(line) 在这一点之前,一切都是正常的,'

我正在尝试用Python解析文本流。逐行检查内容,匹配后,将给定的行传递给函数进行处理

处理正在进行,函数返回预期结果。但是,我无法用新行更新原始流——目的是用函数返回的“text”值替换匹配的行

我使用的代码如下所示:

import StringIO
for line in StringIO.StringIO(data):
  if line.startswith('MATCHTHIS'):
    meta, text = parse_data(line)
在这一点之前,一切都是正常的,'meta'和'text'包含我期望的值。但我无法更新“数据”中的特定行以反映“文本”的值


line.replace(line,text)
if
块内工作,但更改不会使其返回到“data”。

字符串在Python中是不可变的对象,不能更改其值。如果要更改
StringIO
缓冲区内的值,可以使用
seek
write
更改任何其他文件中的值,但替换不同长度的行将是一个问题

我建议将文本流建模为行列表。例:

text = "line 1\nMATCHTHIS line 2\nline 3"
lines = text.split('\n')

for i, line in enumerate(lines):
    if line.startswith("MATCHTHIS"):
        meta, new_line = parse_data(line)
        lines[i] = new_line # Replace old line.

 new_text = '\n'.join(lines) # Recreate text with replaced lines.

此外,经典的控制台工具,如
sed
和管道,非常适合这项工作。

谢谢,这很有效
sed
不是选项,因为这是Python web应用程序的一部分。。。我很好奇字符串是不可变的。表示它可以读/写缓冲区,尽管我无法按自己的意愿工作(可能是因为我缺乏经验)。