<p>您的代码中有几个错误:</p>
<ol>
<li>不忽略csv文件的第一行,其中包含“name”和“date”。在</li>
<li>使用字符串存储日期,而不是<code>date</code>类型。在</li>
<li>试图从另一个字符串中减去一个字符串。在</li>
<li>修改<code>datedict</code>中的项,而不首先检查它们是否存在。在</li>
<li>2003年1月1日的斜杠将被视为除号,结果是0。在</li>
</ol>
<p>以下是修复这些错误后代码的外观:</p>
<pre><code>import csv
from collections import defaultdict
import datetime
from datetime import date
import math
def weeks(filename, start_date):
# The defaultdict class will create items when a key is accessed that does
# not exist
datedict = defaultdict(set)
with open(filename, 'r') as csvfile:
filereader = csv.reader(csvfile, 'excel')
read_header = False
for row in filereader:
# Ignore the first row of the file
if not read_header:
read_header = True
continue
# Strip out any whitespace
cells = [col.strip() for col in row]
name = cells[0]
date_str = cells[1]
# Parse the date string into a date
row_date = datetime.datetime.strptime(date_str, '%d/%m/%Y').date()
# Calculate the difference between dates
delta = start_date-row_date
# Convert from days to weeks, you could use math.floor() here if
# needed
delta_weeks = int(math.ceil(delta.days / 7.0))
datedict[name].add(delta_weeks)
return datedict
date_dict = weeks('a.csv', start_date=date(year=2013, month=1, day=1))
for name, dates in date_dict.iteritems():
print name, list(dates)
</code></pre>
<p>打印出来:</p>
^{pr2}$
<p>你应该能想出办法让它打印“周”。在</p>