Отображение данных из файла CSV на основе пользовательского ввода?

#python #csv #input #output

#python #csv #ввод #вывод

Вопрос:

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

 import csv


def main():
    fields = []
    rows = []
    with open('TableHoroscope.csv', 'r') as csvfile:
        csvreader = csv.reader(csvfile)
        fields = next(csvreader)
        for row in csvreader:
            rows.append(row)
        print("Num of rows:", csvreader.line_num)
    print('Field names are:'   ', '.join(field for field in fields))

    user_birthday()
    print_zodiac(rows)


def print_zodiac(rows):
    for row in rows[:13]:
        for col in row:
            print(col)
        print('')


def user_birthday():
    date = int(input("Enter date:"))
    month = input("Enter month:")
    print('Birthday: '   str(date)   month)
    print('')


main()
 

Вот текстовая версия моего CSV-файла

 SIGN,START,END
Aries,21-Mar,19-Apr
Taurus,20-Apr,20-May
Gemini,21-May,20-Jun
Cancer,21-Jun,22-Jul
Leo,23-Jul,22-Aug
Virgo,23-Aug,22-Sep
Libra,23-Sep,22-Oct
Scorpio,23-Oct,21-Nov
Sagittarius,22-Nov,21-Dec
Capricorn,22-Dec,19-Jan
Aquarius,20-Jan,18-Feb
Pisces,19-Feb,20-Mar
 

Мне бы очень хотелось получить помощь в том, как подойти к этому. Я ограничен тем, что могу сделать со своим кодом, учитывая, что мне нужно иметь четыре функции def и никаких глобальных переменных, и я все еще новичок. Спасибо!

Комментарии:

1. Вы должны предоставить CSV-файл в виде текста (а не изображения), чтобы другим было легче помогать.

2. Хорошо, спасибо за совет!

Ответ №1:

Вам нужно сравнить предоставленную пользователем дату рождения с датами в вашей rows переменной. Вы можете сделать это, преобразовав ваши даты из вашего CSV-файла в объекты datetime. Затем вы можете позволить Python выполнить тяжелую работу и вычислить, находится ли дата между двумя датами знака звезды. Более подробную информацию о дате и времени в Python можно найти здесь. Я привел пример того, как это можно сделать, используя ваш формат файла CSV.

Код

 import csv
from datetime import datetime

def main():
    # Read CSV file
    fields = []
    rows = []
    with open('TableHoroscope.csv', 'r') as csvfile:
        csvreader = csv.reader(csvfile)
        fields = next(csvreader)
        for row in csvreader:
            rows.append([row[0], datetime.strptime(row[1], " %d-%b"), datetime.strptime(row[2], " %d-%b")])

    # Calculate zodiac
    print_zodiac(user_birthday(), rows)

def user_birthday():
    date = input("Enter day: ")
    month = input("Enter month (e.g. Jan): ")
    print("Birthday: "   date   "-"   month)

    datetime_birthday = datetime.strptime(date   month, "%d%b")
    return datetime_birthday

def print_zodiac(birth_date, star_signs):
    # Compare birth date with zodiac signs
    for star_sign in star_signs:
        if (star_sign[1] <= birth_date and star_sign[2] >= birth_date):
            print("Your star sign is "   star_sign[0])

main()
 

Вывод

 Enter day: 30
Enter month (e.g. Jan): Mar
Birthday: 30-Mar
Your star sign is Aries