gpt4 book ai didi

python - 复制不在行python开头的两个字符串之间的所有行

转载 作者:行者123 更新时间:2023-12-03 22:59:04 25 4
gpt4 key购买 nike

我是这个世界的新手,我需要使用以下文件进行此操作:


...... | 4751 | ......














99999 |



我想搜索此字符串“ | 4751 |”并复制所有行和带有字符串“ | 4751 |”的行直到包含99999 |的行

文本具有倍数“ | 4751 |”和99999 |我想复制它们之间的所有行

python有可能吗?我在这里找到了一些帖子,但是问题是我无法修改脚本,因为我的字符串| 4751 |在行的中间,而不是在行的开头。

最佳答案

我们可以构建一个自定义迭代器(和上下文管理器),以从输入文件中检索所需的行

class Collector:
def __init__(self, filename, start_marker, stop_marker):
self.toggle_collect = False
self.f = open(filename)
self.m1 = start_marker
self.m2 = stop_marker

def __enter__ (self):
return self

def __exit__ (self, exc_type, exc_value, traceback):
self.f.close()

def __iter__(self):
return self

def __next__(self):
while True:
r = next(self.f)
if self.m1 in r: # found the start-collecting marker
self.toggle_collect = True
elif self.m2 in r: # found the stop-collecting marker
self.toggle_collect = False
continue
if self.toggle_collect: # we are collecting
return r.rstrip() # collect row


with Collector('file_rows.txt', '4751', '99999') as c:
for r in c:
print(r)


其中,输入文件为

foobar0
foo|4751|bar1
foobar2
foo99999|bar3
foobar4
foobar5
foo|4751|bar6
foo99999|bar7
foobar8


产生

foo|4751|bar1

foobar2

foo|4751|bar6


注意:如您在输出中看到的,行之间用空白行隔开。这是因为它们包括回车票。

如果不需要,我们可以将其剥离

            if self.toggle_collect:  # we are collecting
return r.rstrip() # provide row


如果我们想要列表中的行,只需从迭代器创建一个

with Collector('file_rows.txt', '4751', '99999') as c:
results = list(c)

关于python - 复制不在行python开头的两个字符串之间的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59740366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com