Лучший способ прочитать CSV и случайно напечатать строку и столбец в Python? - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь создать программу терминов и определений.У меня есть CSV, где у меня есть два столбца, термины и определения.Я пытаюсь прочитать файл, а затем случайным образом выбрать строку в CSV и распечатать определение, а затем требовать входной ответ, чтобы угадать термин.

До сих пор я разобрался, как читать файл, однако я застрял на том, как случайным образом выбрать строку и затем задать столбец 2 этой строки, а затем подождать и проверить ответ с помощью столбца 1.

Пока что у меня есть:

re = open('Psycstudy.csv') 
spreadsheet = csv.DictReader(re)

Это помещает его в словарь, но теперь я не уверен, как случайным образом выбрать определение и термин.Спасибо за любую помощь заранее.

1 Ответ

3 голосов
/ 15 апреля 2019

Вы можете использовать модуль random для выбора случайной строки.

Для данного файла definitions.csv

term1,def1
term2,def2
term3,def3
term4,def4
term5,def5

Используйте следующий код для получениячто вы хотите.

import csv
import random

data = [r for r in csv.reader(open('definitions.csv'))]
test = random.choice(data)

print(test)
# ['term3', 'def3']

С этим вы можете использовать test[0] и test[1], чтобы получить термин и определение.Если вы хотите использовать словарь для этого, вместо этого вы можете использовать словарное понимание.

data = {r[0]: r[1] for r in csv.reader(open('definitions.csv'))}
term = random.choice(list(data.keys()))

print(term, data[term])
# term2 def2

Или, если вы действительно хотите использовать функцию csv.DictReader(), вы можете использовать ее, если у вас естьЗаголовки в вашем файле.Я добавил заголовки для этого последнего примера.

data = csv.DictReader(open('definitions.csv'))
term = random.choice([i for i in data])

print(term)
# {'term': 'term1', ' definition': 'def1'}

Будучи любопытным, я решил определить, сколько времени это займет с 5000 определений.Если у вас много терминов, я бы подумал об использовании маршрута понимания.

List Comprehension: 100 loops, best of 3:  3.08 ms per loop
Dict Comprehension: 100 loops, best of 3:  3.60 ms per loop
Dict Reader:        100 loops, best of 3: 13.50 ms per loop
...