擅长:python、mysql、java
<p>读取器只能迭代一次。第一次在<code>for i in range(1968,2014)</code>循环中,您使用阅读器中的每一项。所以在第二次循环中,没有项目了。你知道吗</p>
<p>如果要将<code>i</code>的每一个值与文件中的每一行进行比较,可以交换循环,使循环<code>for row in reader</code>位于外部,只运行一次,而不是多次运行<code>i</code>循环。或者你可以每次创建一个新的阅读器,尽管这可能会比较慢。你知道吗</p>
<p>如果要一次性处理整个文件,则需要创建一个值字典来替换refMin。处理每一行时,可以遍历字典键,也可以基于当前行进行查找。另一方面,如果您愿意多次读取文件,只需将行<code>reader = csv.reader(...)</code>移到外循环中即可。你知道吗</p>
<p>以下是一个未经测试的一次性方法:</p>
<pre><code>import csv
import collections
refMin = collections.defaultdict(lambda:40)
with open('data.csv') as csvfile:
reader = csv.reader(csvfile, delimiter=',',quotechar='|', quoting=csv.QUOTE_ALL)
allowed_years = set(str(i) for i in range(1968,2014))
for row in reader:
year = int(str(row[0])[:4])
if float(row[1]) <= refMin[year]:
refMin[year] = float(row[1])
for year in range(1968, 2014):
print 'The minimum value for ' + str(year) + ' is: ' + str(refMin[year])
</code></pre>
<p><code>defaultdict</code>就像一个普通的字典,只是它有一个以前没有设置的键的默认值。你知道吗</p>