根据用户输入显示 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
我正在做一个基于占星主题的迷你项目,我会询问用户的出生日期和月份,然后输出他们的星座。到目前为止,我的代码只是简单地打印日期和月份以及我的整个 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