Home > Enterprise >  Displaying data from CSV file based on user input?
Displaying data from CSV file based on user input?

Time:12-10

I'm working on a mini horoscope theme-based project where I ask for the users' birth day and month and as a result output their zodiac sign. So far my code is simply printing the day and month and my entire CSV file. I'm trying to print the specific outcome based on what the user enters. Here's what I have so far.

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()

Here is a text version of my CSV file

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

I would really like help on how to approach this. I'm limited to what I can do with my code considering I need to have four def functions and no global variables and I'm still a beginner. Thank you!

CodePudding user response:

You need to compare the user provided birthdate with the dates in your rows variable. You can do this by converting your dates from your CSV file to datetime objects. You can then let Python do the heavy lifting and calculate if a date is between the two star sign dates. More information on datetime in Python can be found here. I've provided an example of how this can be done using your format of CSV file.

Code

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()

Ouput

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