根据用户输入显示 CSV 文件中的数据?

Displaying data from CSV file based on user input?

我正在做一个基于占星主题的迷你项目,我会询问用户的出生日期和月份,然后输出他们的星座。到目前为止,我的代码只是简单地打印日期和月份以及我的整个 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 函数并且没有全局变量,而且我仍然是初学者,我只能使用我的代码做些什么。谢谢!

您需要将用户提供的生日与 rows 变量中的日期进行比较。您可以通过将日期从 CSV 文件转换为日期时间对象来实现。然后,您可以让 Python 完成繁重的工作,并计算日期是否在两个星号日期之间。有关 Python 中日期时间的更多信息,请参见 here。我提供了一个示例,说明如何使用您的 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