2012-09-01 50 views
-5

我正在逐行遍歷員工記錄文件,並嘗試將新行(工作班次的記錄)插入到員工結尾的文件中記錄,以「?」標記。如何在Python中獲取line-> next

所以基本上我的文件看起來像這樣:

員工#####!
喬史密斯
員工
第一班
第二班


簡·史密斯
偶爾志願者

第一移位
秒移
第三換檔

@

......我想說的是給Jane Smith的記錄增加一個「第四班」。我想通過迭代文件的工作副本,找到jane的記錄(使用標誌),然後噹噹前行的後繼者(line-> next ??)是「?」時執行此操作。我知道我現在的路線是Jane最後一次記錄的班次。然後,我可以在繼續將舊文件的剩餘部分複製到新文件之前寫入「第四班」行。

當我遍歷所有這些行時,如何在行之後讀取行(檢查「?」)而不實際跳過它?

+2

丹尼斯:「RTFM」並沒有像你想象的那麼有效。如果你希望在保持模糊不清的情況下對新手進行簡潔和無益的幫助(即「閱讀這本電話簿大小的文檔以解答你的具體問題」),那麼請不要回答我的問題。人們已經知道如何花費一週的時間翻閱軟件文檔,而無需瞭解他們需要知道的內容。 – user1419715

+2

堆棧溢出會得到許多過於簡單的問題,只需查看文檔即可解答,而且人們越來越厭倦它們。然而,你是對的,有些情況下你可能已經搜索了幾個小時的文檔,卻找不到答案。下一次,只是這麼說;)告訴我們你在搜索什麼和在哪裏,給我們至少一個暗示,你試圖解決你自己的問題。當你更熟悉Stack Overflow時,你會希望知道爲什麼我們有時需要保持警惕。 – yannis

+0

哦,那YouTube鏈接是毫無意義的,請將你的問題在未來保持簡潔,不要有任何不必要的毛病。 – yannis

回答

1

無論如何,你基本上不能只在文件的中間插入一行。相反,您應該使用包含新行的新文件覆蓋舊文件。所以解決方案是這樣的:

  1. 打開文件以供閱讀。
  2. 保存文件的內容,最好是逐行排列,以便於在特定行插入。
  3. 將新行插入保存的內容。
  4. 重新打開文件,這次以寫入模式,並用保存的修改內容覆蓋其內容。

所以,你的榜樣,和使用標誌的想法,找到插入點,你會做這樣的事情:

#Step 1 
with open('testFile', 'r') as f: 
    #Step 2 
    contentList = f.readlines() 

#Step 3 
isJane = False # <-- flag 
i = 0 
insertIndex = None # used to avoid changing the list while looping over it 
for line in contentList: 
    if 'jane' in line.lower(): 
     isJane = True 
    if isJane and line.strip() == '?': 
     insertIndex = i 
    i += 1 
contentList.insert(insertIndex, 'fourth shift\n') 

#Step 4 
with open('testFile', 'w') as f: 
    f.writelines(contentList) 

有這樣做的更短的方式,但是這可能是最直接的。

+0

良好的編輯呼叫。相關元問題:http://meta.stackexchange.com/questions/145681/is-it-bad-etiquette-to-answer-a-question-that-already-has-lots-of-downvotes –