根据randomname更新特定的csv列

时间:2018-07-10 10:31:49

标签: python csv

我的代码从csv文件中提取了一个随机名称。按下按钮后,我希望我的代码搜索csv文件,并更新代码中先前生成的名称旁边的单元格。

存储名称的变量称为name 从csv文件中提取随机名称的索引存储在变量y

该函数看起来像这样。我之前曾问过这个问题,但是由于没有运气,所以我对函数进行了编辑,希望更加清楚。

    namelist_file = open('StudentNames&Questions.csv')
    reader = csv.reader(namelist_file)
    writer = csv.writer(namelist_file)
    rownum=0
    array=[]
    for row in reader:
        if row == name:
            writer.writerow([y], "hello")

My csv file looks like this

仅csv文件的前两列是相关的

此功能可从csv文件中提取随机名称。

def NameGenerator():
    namelist_file = open('StudentNames&Questions.csv')
    reader = csv.reader(namelist_file)
    rownum=0
    array=[]
    for row in reader:
        if row[0] != '':
            array.append(row[0])
            rownum=rownum+1
    length = len(array)-1
    i = random.randint(1,length)
    global name
    name = array[i]
    return name

1 个答案:

答案 0 :(得分:2)

您的代码存在许多问题:

  1. 您正在尝试同时在同一文件上同时拥有一个读取器对象和一个写入器。相反,您应该读入文件内容,进行必要的更改,然后最后将整个文件写回。
  2. 您需要以写入模式打开文件才能实际更改内容。当前,您没有指定使用的模式,因此默认为读取模式。
  3. row实际上是一个代表行中所有数据的列表。因此,它不能等于您要搜索的名称,只能是第0个索引。

以下方法应该起作用:

with open('StudentNames&Questions.csv', 'r') as infile:
    reader = csv.reader(infile)
    data = [row for row in reader]

for row in data:
    if row[0] == name:
        row[1] += 1

with open('StudentNames&Questions.csv', 'w', newline='') as outfile:
    writer = csv.writer(outfile)
    writer.writerows(data)