在python中,我有一个输入文本文件(如下),其中包括3个文本部分,我需要首先在每个文本部分的底部找到所有包括'shsux / en',然后在本节下,我想循环查找以'udp'和'jkp'开头的所有行,并将整个部分输出到一个新的文本文件中。
hsussksdjeoslllllllllllll/shsux/ujkes
jkp_shsu_hhhhhhhhhhhhhhhhhhhhhhhhh
jkp_shsu_hhhhhhhhhsesssssssssssssssss
jkp_shsu_hhhhhhhhhsesssssssssssssssss
hsussksdjeoslllllllllllll/shsux/en
------------------------------------------------------------
hsussksdjeoslllllllllllll/shsux/sed
udp_shsu_hhhhhhhhhhhhhhhhhhhhhhhhh
udp_shsu_hhhhhhhhhsesssssssssssssssss
jkp_shsu_hhhhhhhhhsesssssssssssssssss
hsussksdjeoslllllllllllll/shsux/en
------------------------------------------------------------
hsussksdjeoslllllllllllll/dfsux/df
udp_shsu_hhhhhhhhhhhhhhhhhhhhhhhhh
udp_shsu_hhhhhhhhhsesssssssssssssssss
jkp_shsu_hhhhhhhhhsesssssssssssssssss
hsussksdjeoslllllllllllll/dfsux/en
------------------------------------------------------------
例如,带有'/ shsux / en'的第一行是
hsussksdjeoslllllllllllll/shsux/en
我需要先找到它,一旦有了它,我想知道如何才能回退该节
jkp_shsu_hhhhhhhhhhhhhhhhhhhhhhhhh
jkp_shsu_hhhhhhhhhsesssssssssssssssss
jkp_shsu_hhhhhhhhhsesssssssssssssssss
并以'jkp'返回行
关于应该使用的功能以及如何实现此功能的任何建议。谢谢!
答案 0 :(得分:0)
请注意,如果您不能指定段的方式(并且在一个文件中有多个不同的段),则不可能列出段中符合某些条件的所有行。 但是,假设您只知道段的结尾,则可以在输入文件上循环两次。在第一次迭代中,您可以存储行数,在其中找到“节末”字符串。像这样:
end_of_section_line_nb = []
for counter, line in enumerate(file):
if #condition to check, use regex or just "some_string in line", depending on your needs
end_of_section_line_nb.append(counter)
然后再次循环遍历文件,并在任何块中搜索每次出现的字符串(“ udp” ...)。第一次迭代后,您知道节的结尾处有多少行,因此您可以检查您所在的节。
通过这种方式,您将“ udp”内容分配给下一个可识别的下一个块,但您将无法确定它是否在其中(因为您未指定块的开始方式)。
您还可以循环遍历文件,并始终将一些前几行存储在内存中,但是如果您的节很大,则效率不高。