2012-12-12 69 views
-2

我的For循環每次讀取一行時跳過第一行。 當我只需要將整個文件讀入內存時,問題不會發生,但大多數情況下,我需要一次讀取一行。在For循環中丟失一行文本文件

下面是發生問題的一個示例。 此循環只是重新排列列表中的元素。 我已經省略了打開和關閉的行,讀取&寫入文件(我這樣做的笨重方式)。它的所有逗號分隔文本數據。

lineString=fileItemR.readline() 

for lineString in fileItemR: 
    lineList = lineString.split(",") 
    newList = (lineList[1],lineList[0],lineList[2:99]) 
    lineItem = str(newList) 
    formatString = lineItem.replace("('","").replace("', '",",").replace("', ",",").replace("['","").replace("\\n","\n").replace("'])","") 

    fileItemW.write(formatString) 
+0

你的for循環沒有這樣的事情。 for循環之前的行顯式讀取第一行,然後您對它做任何事情。 – geoffspear

+1

downvoted因爲stackoverflow不是你的調試工具,pdb.set_trace()是。 – mihaicc

+0

你如何更新for循環內的lineString? – coder

回答

4

這是第readline()(一個你CA在循環之前)吃掉你的第一行。

+0

謝謝!在我問完之後,我確實對此感到疑惑(之前花了很長一段時間)。我猜readline讀取第一行,然後For循環依次在未讀的行上繼續。我會放下循環外的第一行。這基本上是一個我在一個程序中反覆重複的操作,所以它解決了我不得不設計一個問題來解決的問題。儘管「解決方案」今天用盡了繩子! ;-) 謝謝! – shaymo

5

你的問題是你讀出該文件的第一行,不要用它做任何事情

lineString=fileItemR.readline() 

刪除此,你應該確定

你也可以做到這一點有點更簡單:

for lineString in fileItemR: 
    lineList = lineString.split(",") 
    lineList[0], lineList[1] = lineList[1], lineList[0] 
    fileItemW.write(",".join(lineList[:99])) #Don't use [:99] if there's only 100 items in the line, and this could change in the future. If you're discarding items past the 100th then this is fine. 
+0

是的,就是這樣。謝謝! – shaymo