2017-08-31 69 views
2

我想逐行讀取文件,但在讀完最後一行之後,它應該返回到文件的開頭。在閱讀python的最後一行之後返回到文件的開始處

這裏是我的代碼:

def readLabels(self, n): 
    resline = np.empty([0,2]) 
    for i in range(0,n): 
     line = (self.f2.readline()).split(',') 
     line = [x for x in line if is_number(x)] 
     line = [float(s) for s in line] 
     line = np.asarray(line) 
     resline = np.concatenate((resline, [line]),axis=0) 
    return resline 

這個函數返回文件作爲一批n行。但是,它應該不斷返回到文件的開頭,以便我可以一遍又一遍讀取批次。 那麼我怎樣才能讓readline回到開頭?

謝謝你的時間!

+0

應用計數器,並檢查for循環中的行是否大於計數器結果。如果是,請讓循環再次啓動 –

+0

「f2」在哪裏打開?是否有其他方法正在閱讀,使用'f2'? – dawg

+0

其中很多可以縮短爲'line = np.asarray([float(x)for self in.f2.readline()。split(',')if isnumber(x)])' –

回答

1

您應該檢查readline()返回的結果。如果它返回空字符串,那麼你可以回到文件的開頭。

def readLabels(self, n): 
    resline = np.empty([0,2]) 
    for i in range(0,n): 
     line = self.f2.readline() 
     if not line: 
      # back to top 
      self.f2.seek(0) 
      # read again 
      line = self.f2.readline() 
     line = line.split(',') 
     line = [x for x in line if is_number(x)] 
     line = [float(s) for s in line] 
     line = np.asarray(line) 
     resline = np.concatenate((resline, [line]),axis=0) 
    return resline 
+1

'readline'將返回''''而不是'None'。你的代碼是正確的(我認爲),但你的解釋不是。感謝您注意到錯誤,請致電 – dawg

+0

。糾正。 – ohannes

+0

這可以按需要工作。謝謝! – user103766

1

你必須尋找文件的開始。

所以你的情況,我認爲該文件是self.f2,因此你必須使用:

self.f2.seek(0) 
2

你或許可以嘗試self.f2.seek(0)你讀它後的第一次。這會將偏移位置設置爲0.

+0

但是我怎麼知道什麼時候我到最後一行去尋找(0)? – user103766

+0

*但是我怎麼知道什麼時候我到達最後一行做seek(0)*當你嘗試從文件中讀取並且什麼也沒有 - 在Python中,這是文件的結尾。 – dawg

+0

謝謝@dawg。這工作! – user103766

相關問題