2016-10-20 52 views
0

我有一個文件,每個文件包含x。 我需要能夠從這個文件中獲取n的值,將它們放入一個數組中,將該數組傳遞到一個新的進程中,清除該數組,然後從該文件中獲取另一個值,以提供下一個進程。Python - 在一個文件中處理大量行

我遇到的問題是,當x是一個像12這樣的值,我試圖給予,比方說,每個過程的10塊值。

第一個過程將得到它的前10個值沒有問題,但我無法將其餘2個過程給予最後一個過程。

如果我們假設您告訴程序爲每個進程提供10個文件的值,但文件只有1個或甚至9個值,那麼問題也會出現。

我需要知道,當我在最後一組值小於n

我想避免服用文件中的每一個值,它在陣列中存儲全部一次,因爲我可能會遇到內存問題,如果該文件中有數以百萬計的值。

這裏是什麼,我一直試圖做一個例子:

chunk = 10 
value_list = [] 
with open ('file.txt', 'r') as f: 
    for value in f: 
     value_list.append(value) 
     if (len(value_list) >= chunk): 
      print 'Got %d' % len(value_list) 
      value_list = [] # Clear the list 
      # Put array into new process 

這將趕上在這個例子中每10個,但它不會工作,如果甚至有happend小於10的文件中開始用。

+0

只是使用來自'value_list'剩餘的數據你的循環是爲了通話的過程中最後一次(如果'value_list'不爲空) –

回答

1

我通常在這種情況下做的只是處理for循環後的最後一個(短)數組。例如,

chunk = 10 
value_list = [] 
with open ('file.txt', 'r') as f: 
    for value in f: 
     if (len(value_list) >= chunk): 
      print 'Got %d' % len(value_list) 
      value_list = [] # Clear the list 
      # Put array into new process 
     value_list.append(value) 
    # send left overs to new process 
    if value_list: 
     print 'Got %d' % len(value_list) 
     # Put final array into new process 
+0

我編輯過的帖子,包括了'VALUE_LIST後。追加(值)'。不知道爲什麼不在那裏。只是想指出,如果你有'value_list.append(value)',那麼如果它至少碰到一次,就會跳過第n個值。 –

+1

上面的代碼有一個邏輯錯誤 - 每次到達'chunk'size時它都會跳過一行。解決方案:將'append'移出'else'分支。 –

+0

@ShaunAran,布魯諾,趕上!謝謝你們倆。我糾正了這個例子。 –