簡體   English   中英

如何在Python 3中向后搜索幾行?

[英]How to search backward several lines in Python 3?

有一種在Python反向查找String中向后內聯搜索的解決方案:

s.rfind('I', 0, index)

但是,如果我需要在該行上方的幾行中搜索一個字符串? 說我通過使用以下方法找到了關鍵字:

with open("file.txt") as f
    searchlines = f.readlines()

for i, line in enumerate(searchlines):
    if "keyword" in line: 
    do_something()

我想do_something()是向后查找另一個關鍵字。 要應用上面的代碼,我想我需要f.read()以便可以將文件制成字符串。 但這是完全不正確的,因為我必須readlines()read() (大)文件。 我需要使用readlines()因為第一個關鍵字可能在文本中出現幾次,並且需要全部找到它們。

有什么更好的方法嗎?

圖片描述

@engineer
- kỹ sư
@engineering
- kỹ thuật
- civil e. ngành xây dựng
- communication e. kỹ thuật thông tin
- control e. kỹ thuật [điều chỉnh, điều khiển] (tự động)
- development e. nghiên cứu những kết cấu mới

我寧願這樣處理:由於您要查找以@開頭的行,因此我寧願將所有行都存儲在列表中,如果找到以@開頭的新行,則丟棄前面的行。

這樣我們得到:

def do_something(lines):
    print("I've got:")
    print(''.join(lines))

lines = []

with open("file.txt") as f:
    for i, line in enumerate(f):
        if line.startswith('@'):
            lines = []

        lines.append(line)
        if 'development' in line:
            do_something(lines)

帶有file.txt的輸出將是:

I've got:
@engineering
- kỹ thuật
- civil e. ngành xây dựng
- communication e. kỹ thuật thông tin
- control e. kỹ thuật [điều chỉnh, điều khiển] (tự động)
- development e. nghiên cứu những kết cấu mới

通常,如果您只希望有N最后看到的行,則可以使用collections.deque而不是列表:

from collections import deque
N = 100
last_lines = deque(maxlen=N)

with open("file.txt") as f:
    for i, line in enumerate(f):
        last_lines.append(line)
        if 'development' in line:
            do_something(last_lines)

現在,如果當前行中包含單詞development ,則do_something將最多傳遞100條最后一行,包括當前行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM