В настоящее время я новичок в программировании на Python с файлами CSV, и мне нужна помощь со следующим кодом:
import csv
import random
# Initialize an empty list to store the CSV variables
CSVars = []
# Read the CSV file
with open('greeting.csv', 'r') as f:
reader = csv.reader(f)
for _ in range(16): # Assuming there are 16 rows in the CSV
CSVars.append(next(reader))
print(random.choice(CSVars))
По сути, в этом коде я получаю случайное значение из файла с именем «greeting.csv». Однако всякий раз, когда я получаю значение, оно всегда имеет формат -> '[значение]'. Кто-нибудь знает, как его раздеть и сделать -> значение?
Я пытался добавить его в список разными способами, но не знаю, как его «разделить».
Но будет ли он по-прежнему воспринимать разные значения как разные или сгруппирует их как один текст?
Вы почти у цели, просто нужно вынуть значение из списка.
import csv
import random
CSVars = []
# Read the CSV file
with open('greeting.csv', 'r') as f:
reader = csv.reader(f)
for _ in range(16): # Assuming there are 16 rows in the CSV
# NOTE: You need to take the first value from the next(reader) because it
#is giving you a list.
CSVars.append(next(reader)[0])
print(random.choice(CSVars))
print(CSVars)
Каждая итерация чтения возвращает список. Это происходит потому, что предполагается, что ваш CSV-файл содержит несколько столбцов в строке. Каждый элемент списка будет представлять значение столбца.
Итак, не ограничивая список определенным количеством строк (не очень хорошая идея, поскольку в CSV может быть не так много строк, как вы надеялись):
import csv
import random
with open("greetings.csv", "r", newline = "") as f:
reader = csv.reader(f)
lst = [e[0] for e in reader]
print(random.choice(lst))
...как вариант...
import csv
import random
with open("greetings.csv", "r", newline = "") as f:
reader = csv.reader(f)
lst = list(reader)
print(*random.choice(lst))
Если greetings.csv
содержит только одно значение в строке, не нужно рассматривать его как CSV! Простые строки чтения подойдут:
with open("greetings.csv") as f:
CSVars = [line.strip() for line in f.readlines()]
Если каждая строка вашего CSV-файла содержит только одно значение, CSV-файл не нужен! Просто прочитайте его как обычный текстовый файл.