[英]How to skip n number of lines after finding a specific line in Python 3?
[英]Python read lines after finding specific lines
找到某行后,我試圖取出某些行。 下面是示例:
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
我已經嘗試過if語句,例如:
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
我只是保留一個標志,讓我可以跟蹤要忽略的內容和要采取的內容。
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())
您需要識別要捕獲的模式(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)
我會使用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))
免責聲明:代碼未經測試,但我認為您明白了!
查理
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.