Python 为什么函数会接受所有的值?

Python 为什么函数会接受所有的值?,python,Python,我发现了一个问题。。。当我执行第一个函数时,它会从我导入的csv文件中删除数据并使用它,这就是为什么其他函数无法执行的原因。。。如何纠正这一点? 如果第二个函数单独执行,它将给出所需的结果 CSV文件有3行,即选民id号、县、候选人 import csv with open('election_data_1-2.csv') as file1: reader1 = csv.reader(file1) def total_votes():

我发现了一个问题。。。当我执行第一个函数时,它会从我导入的csv文件中删除数据并使用它,这就是为什么其他函数无法执行的原因。。。如何纠正这一点? 如果第二个函数单独执行,它将给出所需的结果

CSV文件有3行,即选民id号、县、候选人

import csv 
with open('election_data_1-2.csv') as file1:         
      reader1 = csv.reader(file1) 

      def total_votes(): 
           f1 = [vote1[0] for vote1 in reader1]
           print("The total number of voters are:",len(f1)-1)

      def unique_candidates(): 
           b = [] 
           for cd1 in reader1: 
                if cd1[2] == "Candidate"
                     None
                elif cd1[2] not in b: 
                     b.append(cd1[2]) 
           return ("\nThe candidates taking part in elections are",b)
      total_votes()
      unique_candidates()
--------------------------------------------------------------------------------
Result with the second function:
The candidates taking part in elections are ['Vestal','Torres','Seth','Khan']

Result with both the functions:
The total number of voters are: 4324001
The candidates taking part in elections are [ ]
协议如下。由于您在两个函数之间共享同一个reader对象,因此读取器在转到第二个函数之前已经到达迭代的末尾。当第二个函数通过调用读取器上的
next()
获取记录时,它位于列表的末尾

您可以尝试以下方法之一:

  • 将文件路径传递给这两个函数
  • 导入csv
    def总投票数(选举数据文件):
    打开(选举数据文件)作为文件1:
    reader1=csv.reader(文件1)
    f1=[vote1[0]表示读取器1中的vote1]
    打印(f“选民总数为:{len(f1)-1}”)
    def唯一候选人(选举数据文件):
    b=[]
    打开(选举数据文件)作为文件1:
    reader1=csv.reader(文件1)
    对于reader1中的cd1:
    如果cd1[2]=“候选者”:
    没有一个
    elif cd1[2]不在b中:
    b、 追加(cd1[2])
    return f“\n参加选举的候选人是{b}”
    选举数据文件='选举数据1-2.csv'
    总票数(选举数据文件)
    唯一候选人(选举数据文件)
    
  • 将文件数据加载到内存中,并将其传递给函数。(如果文件太大,无法放入内存,则会出现问题。)
  • 导入csv
    def总投票数(选举数据):
    f1=[vote1[0]表示选举数据中的vote1]
    打印(f“选民总数为:{len(f1)-1}”)
    def唯一候选人(选举数据):
    b=[]
    对于选举数据中的cd1:
    如果cd1[2]=“候选者”:
    没有一个
    elif cd1[2]不在b中:
    b、 追加(cd1[2])
    return f“\n参加选举的候选人是{b}”
    选举数据=[]
    打开('election_data_1-2.csv')作为文件1:
    reader1=csv.reader(文件1)
    选举数据=列表(读取器1)
    总票数(选举数据)
    唯一候选人(选举数据)
    
    关闭
    读取器1
    并在功能之间再次打开它?