通過此代碼,我獲得了包含Name
的完整行。但我需要得到這條線和接下來的兩條線。我不知道我該如何做到這一點。查找一行並獲得下一行
def daten(s):
for i in s:
if i.find('Name') >= 1:
daten = i
return daten
例子:
AAA
Name
CCC
DDD
EEE
我想Name
,CCC
和DDD
通過此代碼,我獲得了包含Name
的完整行。但我需要得到這條線和接下來的兩條線。我不知道我該如何做到這一點。查找一行並獲得下一行
def daten(s):
for i in s:
if i.find('Name') >= 1:
daten = i
return daten
例子:
AAA
Name
CCC
DDD
EEE
我想Name
,CCC
和DDD
您可以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'
開頭的行後面沒有行,則會發生異常。
使用'startswith'不符合原始代碼的行爲(這可能不是想要的,但仍然...) –
這是另一種解決方案 - 如果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]
它在任何線搜索單詞「名稱」,如果找到它 - 返回字列表以及兩個詞以下。
是什麼讓你覺得這與文件有什麼關係? –
@ScottHunter,我認爲它 - 示例輸入看起來像一個文件... - 但你是對的,只是編輯我的答案是更具體的! – coder
如果s
是一個列表,那麼這將匹配你的代碼,但不返回所需的元素:
def daten(s):
for i,d in enumerate(s):
if d.find('Name')>=0:
return s[i:i+3]
注意,這
是什麼類型的? –
提供的代碼在樣本數據中找不到「名稱」。 (還有一個縮進語法錯誤。) –
歡迎來到[so]!請[編輯]你的問題,包括一個簡短的,**完整的**程序,證明問題。請包括預期的輸出並複製粘貼實際輸出。有關更多信息,請參見[mcve]。 –