Python可以跨行执行'替换'功能吗?

时间:2015-10-28 15:44:40

标签: python replace newline data-processing

我想将以下脚本中的第3个}替换为]

 "objectLocationHeight" : "46.500000",
    "text" : "1494"
  },
  "timestamp" : "2015-10-09 12:50:58",
  "eventType" : "keyboardOnAnsBox",
  "action" : "endTyping"
}
  },
"submitTime" : "

以下是目标结果

 "objectLocationHeight" : "46.500000",
    "text" : "1494"
  },
  "timestamp" : "2015-10-09 12:50:58",
  "eventType" : "keyboardOnAnsBox",
  "action" : "endTyping"
}
  ],
"submitTime" : "

然而,似乎'替换'功能只能在一行内工作,而我无法获得所需的结果

str1= str.replace("},\n\"submit","],\n\"submit")

我是否知道是否有其他语法允许我跨行执行replace

2 个答案:

答案 0 :(得分:0)

replace方法本身只接受另一个可选参数“max”。所以,我想说没有一些编码就没有直接的办法。

怎么做呢?好吧,我假设您正在阅读'str'变量中的全文。你可以做的只是遍历str行,一旦到达第3行,就将replace方法应用到该行。

类似的东西:

counter = 0
for line in str.splitlines(): 
  if "}" in line:
    counter += 1
  if counter == 2:
    line = line.replace("}", "]")
  # do something with line here ... 
但是,我不喜欢这个解决方案。它对您的样本非常具体,但您没有提供任何其他类型的信息。

答案 1 :(得分:0)

如果我理解您的问题,您需要替换文档}中的],如果它出现在"submitTime"之前。

您可以使用向后文档读取和布尔标记来确保前一行是相关的:

for line in reversed(open("filename").readlines()):
    cond = line.startswith("\"submitTime\"")
    if cond and line.startswith("},"):
        new = line.replace("},","],")
        print new
        cond = False
    else:
        print line

也许存在更优雅的解决方案,但这应该有效。当然,您可以通过打开输出文件并使用print写入来替换fout.write(line)