有很多方法可以做到這一點,每一種方法都可以推廣到不同類別的輸入 - 就像這樣。如何:
def dates_from_two(line1, line2):
line2 = line2.split()
for word in line1.split():
wsplit = word.split('/')
if len(wsplit) == 3:
yield word if wsplit[-1] else (word + line2.pop(0))
with open("period.txt") as fp:
lines = fp.readlines()
for i, line in enumerate(lines):
if line.startswith("Period End Date"):
next_line = lines[i+1] if i+1 < len(lines) else ''
dates = list(dates_from_two(line, next_line))
print dates
這給(你的3起):
['09/30/2012', '06/30/2012', '03/31/2012', '12/31/2011', '09/30/2011']
['09/30/2012', '06/30/2011', '03/31/2011', '12/31/2010', '09/30/2012']
['09/30/2012', '06/30/2011', '03/31/2011', '12/31/2011', '09/30/2012']
基本上,上面寫明所有的線到內存(不是必須的,但更簡單,如果文件不是太大)並在其上循環,尋找以「期末日期」開頭的行。如果它找到一個,它將發送該行,而下一個發送到dates_from_two。
dates_from_two只是簡單地遍歷第1行中的每個單詞並嘗試將其按/
拆分。如果這產生三個部分,我們將假定它是一個日期。如果是這樣,那麼如果日期的最後一部分是非空的,那麼我們就得出日期,否則我們得出該單詞加上第一行的總和(我們彈出)。如果我們從不需要行2,我們就不會使用它。請注意,line2.pop(0)
表示「採用line2的第一個元素,然後刪除它」。
來源
2012-03-11 04:18:24
DSM
驚人......我只是太新鮮了,無法投票回答這個問題!欣賞並學到很多東西! – 2012-03-11 04:45:48
問題, dates = list(dates_from_two(line,next_line)) 爲什麼你沒有在dates_from_two()中定義「return」,但是這個函數返回的是單詞?由於關鍵字「收益」?? – 2012-03-11 04:53:20