2017-02-21 116 views
-1

通過此代碼,我獲得了包含Name的完整行。但我需要得到這條線和接下來的兩條線。我不知道我該如何做到這一點。查找一行並獲得下一行

def daten(s): 
for i in s: 
     if i.find('Name') >= 1: 
      daten = i 
      return daten 

例子:

AAA 
Name 
CCC 
DDD 
EEE 

我想NameCCCDDD

+0

是什麼類型的? –

+0

提供的代碼在樣本數據中找不到「名稱」。 (還有一個縮進語法錯誤。) –

+0

歡迎來到[so]!請[編輯]你的問題,包括一個簡短的,**完整的**程序,證明問題。請包括預期的輸出並複製粘貼實際輸出。有關更多信息,請參見[mcve]。 –

回答

0

您可以s一個迭代器,如果它是不是已經一個,然後調用next得到接下來的兩行後面的行包含'Name'

def daten(s): 
    s = iter(s) 
    for line in s: 
     if line.startswith('Name'): # or more generally: if 'Name' in line: ... 
      return [line, next(s), next(s)] 
    else: 
     raise SomeException 

如果沒有包含名稱的行,或者在以'Name'開頭的行後面沒有行,則會發生異常。

+0

使用'startswith'不符合原始代碼的行爲(這可能不是想要的,但仍然...) –

1

這是另一種解決方案 - 如果s是一個文件:

def daten(s): 
    with open(s, 'r') as f: lines = f.read().splitlines() 
    for i,line in enumerate(lines): 
     if 'Name' in line: return lines[i:i+3] 

它在任何線搜索單詞「名稱」,如果找到它 - 返回字列表以及兩個詞以下。

+0

是什麼讓你覺得這與文件有什麼關係? –

+0

@ScottHunter,我認爲它 - 示例輸入看起來像一個文件... - 但你是對的,只是編輯我的答案是更具體的! – coder

0

如果s是一個列表,那麼這將匹配你的代碼,但不返回所需的元素:

def daten(s): 
    for i,d in enumerate(s): 
     if d.find('Name')>=0: 
      return s[i:i+3] 

注意,這

  • 不會對您的示例數據工作,但那麼您的代碼
  • 不會返回任何東西,如果沒有發現任何東西,但您的代碼也沒有