Поиск столбцов в CSV-файле - PullRequest
0 голосов
/ 25 июня 2018

У меня есть программа, которая генерирует случайное имя и случайный вопрос (оба не зависят друг от друга).Я создал функцию с именем 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"]

Here is a picture of the csv file

Обратите внимание, что CSV-файл - это электронная таблица Excel, сохраняемая как .csv

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Панд может быть проще для чтения в CSV-файлах в DataFrame, но если вы хотите перейти с csv:

Каждая строка, которую вы читаете в array.append(row)имеет две колонки.Чтобы получить только второй столбец, измените код так, чтобы он читался как array.append(row[1]) для подстановки в правильный столбец.

На самом деле array будет списком вопросов, а для получения случайного вопроса вам потребуетсячтобы выбрать только один элемент из списка:

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

Обратите внимание, что я должен быть между 1 и количеством вопросов, потому что первая запись в array будет «вопросами»,Название столбца.Для этого мы можем использовать 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
0 голосов
/ 25 июня 2018

Ваш код читает всю строку и сохраняет значение в массив.Вы можете использовать панды или CSV-ридер для сохранения только целевых столбцов.

При использовании панд структура будет выглядеть примерно так:

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

Надеюсь, это поможет.

...