如何修改特定分隔符之间的文本(在文件中)? [关闭]

Posted

技术标签:

【中文标题】如何修改特定分隔符之间的文本(在文件中)? [关闭]【英文标题】:How to modify text (in files) that is between specific delimiters? [closed] 【发布时间】:2022-01-22 04:32:41 【问题描述】:

我有一个类似的文件

some text that must stay as it

<<<<< START of a delimiter of some kind I am free to choose >>>>>>

some text that will be replaced by my own text

<<<<< END of my delimiter >>>>>

some more text that must stay as it

在开始编写我自己的脚本来修改文件中特定分隔符之间的文本(保持分隔符就位)之前,我想确保这不是已经通过模板或其他更多 Pythonic 解决方案解决的问题。

“不,你必须自己写”之类的答案是一个很好的答案——我只是不想跳过我目前没有看到的东西。

【问题讨论】:

最好在您遇到无法解决的特定问题、寻求指导的一般性问题不符合 SO 的目标时使用此站点。 @itprorh66 这个网站也适用于有具体问题并希望在解决之前得到指导的人。你知道我的问题的解决方案吗?如果是的话,我会很高兴听到它。这包括“你必须自己写”。你总是先建立一些东西然后问吗?只是被告知你重新发明了***? 要求有关问题方法的一般指导的问题通常过于宽泛,不适合本网站。人们有自己解决问题的方法,因此不可能有正确的答案。 @itprorh66 感谢您的宝贵意见,它确实有助于解决问题。 我认为您可以使用re.sub 和一些正则表达式“魔术”来做到这一点,但是,我不太确定内存效率(除非您分块处理文件(这也可以拆分一些分隔符之间的部分文本,可能使re.sub 失败或工作不正常)) 【参考方案1】:

mylines 看起来很奇怪,因为在我的情况下,这部分将被生成。

mylines = [
    "hello\n",
    "world\n"
]

delim_start = "# start of my section"
delim_end = "# end of my section"

with open("data.txt") as f:
    lines = iter(f.readlines())

new_file = []
for line in lines:
    if line.startswith(delim_start):
        new_file.append(f"delim_start\n")
        while not next(lines).startswith(delim_end):
            pass
        else:
            new_file.append(''.join(mylines))
        new_file.append(f"delim_end\n")
    else:
        new_file.append(line)

with open("data.txt", "w") as f:
    f.write(''.join(new_file))

【讨论】:

以上是关于如何修改特定分隔符之间的文本(在文件中)? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在Linux中对齐包含不同分隔符的文本文件的不同部分? [关闭]

如何在 Scala Spark 中删除两行分隔符值之间的部分文件? [关闭]

在 txt 文件中的不同列中取两个特定值之间的行 [关闭]

如何多次替换两个分隔符/字符串之间的唯一字符串

如何通过特定的行分隔符读取文本文件?

如何从文本文件中用逗号分隔行中的特定行和值