2016-06-29 27 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

相关问题