【问题标题】:Can Python perform the 'replace' function across lines?Python 可以跨行执行“替换”功能吗?
【发布时间】:2015-10-28 15:44:39
【问题描述】:

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

 "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

【问题讨论】:

  • 我认为问题在于换行符不一定是\n(可能是\r或两者兼有或其他),并且可能有你没有的空格考虑到。正则表达式可能会更好一些,因为您可以使用 or 操作数和 \s* 去除任何空格

标签: python replace newline data-processing


【解决方案1】:

如果我正确理解您的问题,您需要替换文档中] 中的任何}(如果它出现在"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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 感谢您的及时回复。抱歉,我没有提供足够的信息。该代码旨在转换“submitTime”之前的括号,因此以上述方式计算可能不合适。但我认为 for 循环也可能有用!
    • 不客气!关键是下次你还应该指定更多细节,例如,“submitTime”在文件中出现了多少次?
    猜你喜欢
    • 2016-06-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多