在 csv 文件中搜索列

Searching columns in a csv file

我有一个生成随机名称和随机问题的程序(两者相互独立)。我创建了一个名为 QuestionGenerator() 的函数,它应该搜索 csv 文件的第二列并将所有值写入数组。

def QuestionGenerator():
    questionlist_file = open('StudentNames&Questions.csv')
    reader = csv.reader(questionlist_file)
    rownum=0
    array=[]
    for row in reader:
        array.append(row)
        rownum=rownum+1
    i = random.randint(0,3)
    question = array[0,1]
    return question

目前它将文件中的所有值写入数组,而不仅仅是第二列(问题列)。所以数组应该包含以下值

array = ["Consequences of Devolution", "Sources of the Constitution"...."Reasons for a democratic deficit"]

请注意 csv 文件是一个 excel 电子表格,另存为 .csv

您的代码读取整行并将值保存到数组中。您可以考虑使用 pandas 或 CSV reader 来仅保存目标列。

如果使用 pandas,结构将如下所示:

import pandas as pd
df = pd.read_csv(csv_file)
column_of_interest = df.name_of_column #or df['name_of_column']

使用 CSV 库:

included_cols = [2]
for row in reader:
    column_of_interest = list(row[i] for i in included_cols) #included_cols could be a list or single value

希望这对您有所帮助。

Pandas 可能更容易将 csv 文件读入 DataFrame,但如果您想使用 csv:

您在 array.append(row) 中阅读的每一行都有两列。要仅获取第二列,请修改代码以读取 array.append(row[1]) 以子集到正确的列。

array 实际上是一个问题列表,要获得随机问题,您只需要 select 列表中的一个元素:

i = random.randint(1,3) question = array[i]

请注意,i 应介于 1 和问题数之间,因为 array 中的第一个条目将是 "questions",即列的名称。为此,我们可以使用 i = random.randint(1, len(array) - 1) 来处理不同数量的问题。

完整的工作代码是:

def QuestionGenerator():
    questionlist_file = open('StudentNames&Questions.csv')
    reader = csv.reader(questionlist_file)
    rownum=0
    array=[]
    for row in reader:

        # Check to make sure the question cell is not blank
        if row[1] != '':

            # Add only the second column to list
            array.append(row[1])
            rownum=rownum+1

    # Select a random question from the list
    i = random.randint(1,len(array) - 1)
    question = array[i]

    return question