我试图在找到某条线后取出某些线条。以下是示例:
1. ABC01
2. AB_Name
3. AC_Name
4. ID_Name
5. ABC02
6. AB_Name
7. ABB_Name
8. AC_Name
9. AQ_Name
10. ID_Name
11. ABC01
12. AP_Name
13. AZ_Name
14. AB_Name
15. ID_Name
我想要拿出的是在ABC01之后的单线,忽略ABC02并在它之后排。所以我要找的输出是:
1. ABC01
2. AB_Name
3. AC_Name
4. ID_Name
11. ABC01
12. AP_Name
13. AZ_Name
14. AB_Name
15. ID_Name
我尝试过如下语句:
lines = [line.rstrip('\n') for line in open('File.txt')]
listings = []
for line in lines:
if line.startswith("ABC01"):
continue
if line.startswith("ID"):
break
listings.append(line.strip())
我正在使用Python 2.7
答案 0 :(得分:2)
我只是留下一面旗帜,让我跟踪要忽略的内容以及要采取的措施。
ignore = False
for line in lines:
if line.startswith("ABC01"):
ignore = False
elif line.startswith("ABC02"):
ignore = True
if not ignore:
listings.append(line.strip())
答案 1 :(得分:1)
您需要识别要捕获的模式(ABC01及其后),并在找到其他模式时停止捕获。你可以用标志来做到这一点。当我们找到模式时,我们打开标志,并指示应捕获下一行。当找到ABC02模式时,我们将标志变为 False :
lines = ['ABC01', 'AB_Name', 'AC_Name', 'ID_Name',
'ABC02', 'AB_Name', 'ABB_Name', 'AC_Name',
'AQ_Name', 'ID_Name', 'ABC01', 'AP_Name',
'AZ_Name', 'AB_Name', 'ID_Name']
get_lines = False
output = []
for line in lines:
if line.startswith('ABC01'):
get_lines = True
elif line.startswith('ABC02'):
get_lines = False
continue
if get_lines:
output.append(line)
答案 2 :(得分:-1)
我会使用Pyhton ReactiveX扩展攻击此问题:https://github.com/ReactiveX/RxPY
您可以使用RX运算符在一行中巧妙地解决它,例如:
Observable.from_(lines).skip_while(lambda line: "ABC01" in line ).filter(lambda line: not "ABC02" in line).subscribe(lambda line: print(line))
免责声明:代码未经过测试,但我认为您有了这个想法!
查理