2016-06-29 52 views
0

我試圖檢查我的函數的有效性,我注意到我的兩個函數具有相同的代碼給出兩個不同的輸出。我需要在其中一個條件中更改if條件,但我也需要確保它們都正常工作。爲什麼這兩個相同的函數創建兩個輸出過程?

data_out = open("mentees_all_attributes.csv", "rU") 
reader = csv.reader(data_out) 
next(reader,None) 


def primaryWithParticipatedCounts(jobs, count): 
    for line in reader: 
     cells = line 
     new_cell = cells[0], cells[6], cells[7], cells[8], cells[9], cells[ 
      10] # name, # of participation, primary occupation/industry, secondary occupation/industry 
     if int(new_cell[1]) > 0: # Isolate all the participants with more than 0 
      primary = new_cell[2] 
      if primary == jobs: 
       count += 1 

    return jobs, count 

print primaryWithParticipatedCounts(A012,a012counts) 


def primaryWithoutParticipatedCounts(jobs, count): 
    for line in reader: 
     cells = line 
     new_cell = cells[0], cells[6], cells[7], cells[8], cells[9], cells[ 
      10] 
     if int(new_cell[1]) > 0: 
      primary = new_cell[2] 
      if primary == jobs: 
       count += 1 

    return jobs, count 

print primaryWithoutParticipatedCounts(A012,a012counts) 

可以返回輸出爲:

('[A012]', 3) 
('[A012]', 0) 
+3

要重複使用相同的讀者,但一旦讀者閱讀,沒有什麼更多的讀者閱讀,所以第二種方法無關。 –

回答

1

你的兩個功能似乎是相同的(除非我忽略的東西)。問題似乎與reader。像任何文件句柄一樣,閱讀器是一個iterator,一旦你重複了閱讀器中的所有行,它就會被耗盡。因此,當您使用相同的reader再次爲第二個功能,沒有更多的行讀取,並且count結束爲0

你可以嘗試以下任何一項:

  • 打開該文件,並在的功能,而不是重複使用相同的讀者兩次
  • 讀線到一個列表:lines = list(reader);只適用於小文件!
  • 快退的文件句柄開始再次使用在讀者面前:data_out.seek(0)
+0

對於第一個解決方案,我不斷收到: 類型錯誤:強迫爲Unicode:需要字符串或緩衝區,元組發現 和文件過大,第二個解決方案,其中第三個解決方案爲: ValueError異常:無效的字面INT ()與基地10 – peaceandiago

+0

沒有抱歉,第三個解決方案確實工作,我只需要使一個變量整數,我需要再次添加reader = csv.reader(data_out)next(reader,None) – peaceandiago

+0

@peaceandiago我想你應該可以在使用seek時繼續使用舊的'reader',但必須再次跳過第一行。 –

0
data_out.seek(0) between the funcs 
+1

'reader'不具有'seek',但'data_out'具有。 –

+0

正確 - 謝謝 –

+0

做data_out.seek創建一個ValueError:無效的文字爲int()與基地10 – peaceandiago

相關問題