Python能否执行';更换';跨行运行?

Python能否执行';更换';跨行运行?,python,replace,newline,data-processing,Python,Replace,Newline,Data Processing,我只想将下面脚本中的第三个}替换为] "objectLocationHeight" : "46.500000", "text" : "1494" }, "timestamp" : "2015-10-09 12:50:58", "eventType" : "keyboardOnAnsBox", "action" : "endTyping" } }, "submitTime" : " 以下是目标结果 "objectLocationHeight" : "46.5000

我只想将下面脚本中的第三个
}
替换为
]

 "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" : "
然而,似乎“replace”函数只能在一行内工作,我无法使用它获得所需的结果

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

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

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

不过,我不喜欢这个解决方案。它对您的样本非常具体,但您没有提供任何其他类型的信息。

如果我正确理解您的问题,您需要替换文档中出现在
提交时间之前的

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

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

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

我认为问题在于新行字符可能不一定是
\n
(它可能是
\r
或两者都是,或者其他什么),并且可能存在您不考虑的空白。正则表达式可能工作得更好一些,因为您可以使用
操作数和
\s*
去除任何空格谢谢您的快速响应。很抱歉,我没有提供足够的信息。该代码旨在转换“submitTime”之前的括号,因此以上述方式计算可能不合适。但我认为for循环可能也很有用!不客气!关键是下次您还应该指定更多详细信息,例如,“submitTime”在文件中出现了多少次?