如何从文本文件的中间反向迭代



问题
我正在编写一个程序,其最终目标是从.json文件的文本版本中提取几行特定内容。我想自动复制/粘贴几十行或数百行共享同一关键字的行,但其中有几行从该关键字中删除。

建议的解决方案

  • python程序遍历.txt文件以查找特定的关键字
  • 一旦找到该单词,它就会停止并从直到找到SECOND关键字
  • 当找到第二个关键字时,程序会写入该关键字所在的整行转到一个新文件,然后从初始关键字的行再次继续遍历该文件

插图

<fields>
<fullName>NAME KEYWORD</fullName> ##line I want to iterate backwards to so I can write it to another file##
<label>example_label</label>
<length>131072</length>
<trackHistory>false</trackHistory> ##line with keyword to stop the iterating process#
<type>example_type</type>
</fields>

一旦与";名称关键字";被写入一个新文件,然后程序继续到下一节,该节将具有许多相同的字段,但有一个不同的";名称关键字";,等

尝试的解决方案:
我一直在网上寻找有关如何从给定点反向迭代文本文件的明确信息。我发现了一个网站(kite.com(,它说明了如何使用readlines((和reversed((函数,但这些操作是在整个文档上执行的,而不是在不同的部分上执行。
我还查看了Python自己的文档,但其中的建议似乎并没有提出我在这里寻找的功能。(除非我有误解。(

TL;DR
是否有人知道是否存在允许Python从文本文件中间向后迭代的现有模块、函数或实践?

正如评论中提到的,最好使用原始JSON或使用XML解析器。但如果这些都不可能(也许文件太大,无法一次加载到内存中(,我认为您可以做到这一点,而不必反向读取。

saved_line = None
for line in oldfile:
if 'NAME KEYWORD' in line:
saved_line = line
elif '<trackHistory>false</trackHistory>' in line and saved_line:
newfile.write(saved_line)

saved_line将始终包含与您在找到<trackHistory>false</trackHistory>行后反向迭代时找到的行相同的行。

最新更新