首页 > 解决方案 > 我需要比较和日期并返回还有多少天到期或多少天前到期

问题描述

我以前从未使用过 Python,来自 Javascript 背景。

我需要遍历 csv 中的数组并将其与 today 变量中的日期进行比较。然后返回每个项目过期或有效的位置。还有还有多少天到期或多少天前到期。

任何指针?

from datetime import datetime

today = datetime(2020, 5, 2)

with open('./guarantees_end.csv', 'r') as f: 
    for line in f.readlines():

我的 csv 数据编译如下:

2020-06-23,Flat C

2020-07-31,2 Teal Close

2020-08-14,67 Pinkers Mead

2020-08-31,3 Acacia Road

2020-04-13,1 Manor Place

标签: pythoncsv

解决方案


您可以使用以下命令读取今天的日期:

import datetime    
today = datetime.datetime.now().date()

我的 temp.csv 包含:

2020-12-11, ABCD
2020-12-23, EFGH
2020-12-01, IJKL
2020-11-11, MNOP

要从 CSV 读取,您可以使用:

f = open('temp.csv')
csv_reader = csv.reader(f, delimiter=',')
for row in csv_reader:
    product_date_str = str(row[0])

现在您可以使用以下方法将日期字符串(从 csv 读取)转换为 datetime.date 对象:

date_format = '%Y-%m-%d'
product_date = datetime.datetime.strptime(product_date_str, date_format).date()

现在您可以使用以下方法获取日期差异:

diff = (today - product_date).days

然后你可以使用这个差异来打印或显示你想要的任何东西。例如:

if diff > 0:
    print('{} has already expired since {} days.'.format(row[1], abs(diff)))
elif diff < 0:
    print('{} will expire in next {} days.'.format(row[1], abs(diff)))
else:
    print('{} will expire today.'.format(row[1]))

所以完整的代码片段如下所示:

import  csv
import datetime

today = datetime.datetime.now().date()
with open('temp.csv') as f:
    csv_reader = csv.reader(f, delimiter=',')
    for row in csv_reader:
        product_date_str = str(row[0])
        date_format = '%Y-%m-%d'
        product_date = datetime.datetime.strptime(product_date_str, date_format).date()
        diff = (today - product_date).days
        if diff > 0:
            print('{} has already expired since {} days.'.format(row[1], abs(diff)))
        elif diff < 0:
            print('{} will expire in next {} days.'.format(row[1], abs(diff)))
        else:
            print('{} will expire today.'.format(row[1]))

推荐阅读