Python,制作3个带日期的列表

Python,制作3个带日期的列表,python,python-2.7,csv,Python,Python 2.7,Csv,我需要一些帮助来制作CSV文件列表: 现在,我导入了一个文件并列出了两个列表。我的代码在这里: 列表周,包含所有周,日期取自行[0] 列表weight=[]包含行[1]中的所有权重 到目前为止,您在这里看到的我的代码: import csv import datetime import matplotlib.pyplot as plt from pprint import pprint #Open Data/File data1 = open('wloss.csv', 'r') reader1

我需要一些帮助来制作CSV文件列表:

现在,我导入了一个文件并列出了两个列表。我的代码在这里:

列表
,包含所有周,日期取自
行[0]

列表
weight=[]
包含
行[1]
中的所有权重

到目前为止,您在这里看到的我的代码:

import csv
import datetime
import matplotlib.pyplot as plt
from pprint import pprint

#Open Data/File
data1 = open('wloss.csv', 'r')
reader1 = csv.reader(data1, delimiter=',')

week = []
weight = []
dateTime = []

week_year_2011 = []
week_year_2012 = []
week_year_2013 = []
weight_year_2011 = []
weight_year_2012 = []
weight_year_2013 = []

for row in reader1:

    if row[0] != 'week':
        week.append(row[0][:-13])
    if row[1] != 'weight loss':
        weight.append(row[1])

for item in week:
    dateTime.append(datetime.datetime.strptime(item, '%Y-%m-%d'))
我得到的周列表也是从2004年到2014年

这样(您只能看到2005年的数据):

我知道2011年的第一个日期和最后一个日期是:

datetime.datetime(2011, 1, 2, 0, 0),
datetime.datetime(2011, 12, 25, 0, 0),
如何将2011年、2012年和2013年的
datetime
数据放入3个新列表中,就像我在这里已经定义的那样:

week_year_2011 = []
week_year_2012 = []
week_year_2013 = []
应该为语句或其他什么做一个

另外,我如何从2011年、2012年、2013年获得正确的权重,并将其放入以下3个列表中:

weight_year_2011 = []
weight_year_2012 = []
weight_year_2013 = []
我必须用2011年、2012年和2013年的数据绘制3个图(1个图表)。 希望有人能帮助我制作这些新的列表,并将正确的数据放入其中。

我会使用字典按日期对数据进行分组

您似乎有一个头在第一行的CSV文件。下面是一个更简单的版本,它按日期将数据拆分为单独的列表:

import csv
import datetime

by_year = {}

with open('wloss.csv', 'rb') as data1:
    reader = csv.reader(data1)
    next(reader, None)  # skip first row with headers

    for week, weight_loss in reader:
        date = datetime.datetime.strptime(week, '%Y-%m-%d').date()
        by_year.setdefault(date.year, []).append((week, weight_loss))

这建立了一个以年份为基础的字典,每个值都是一个
(日期,体重减轻)
元组列表。

我还建议使用dict。当然,你可以使用
defaultdict(列表)
来避免设置默认值。@JohnZwinck:是的,但我想让它简单一点,因为我已经在这里彻底重写了整个代码。。最好不要在一篇文章中引入太多的新概念。如果我尝试一下你写的代码。。。“我对关闭的文件执行i/O操作时出错。@user3371053:您当时没有使用我的缩进;当块(由缩进确定)完成时,
with
语句将自动关闭文件。我只是不明白:(
import csv
import datetime

by_year = {}

with open('wloss.csv', 'rb') as data1:
    reader = csv.reader(data1)
    next(reader, None)  # skip first row with headers

    for week, weight_loss in reader:
        date = datetime.datetime.strptime(week, '%Y-%m-%d').date()
        by_year.setdefault(date.year, []).append((week, weight_loss))