我使用这个python代码查看csv,其中一列中有日期,另一列中有值。我正在记录每年的最小值。我的代码循环错误。我犯了什么愚蠢的错误?干杯
import csv
refMin = 40
with open('data.csv') as csvfile:
reader = csv.reader(csvfile, delimiter=',',quotechar='|', quoting=csv.QUOTE_ALL)
for i in range(1968,2014):
for row in reader:
if str(row[0])[:4] == str(i):
if float(row[1]) <= refMin:
refMin = float(row[1])
print 'The minimum value for ' + str(i) + ' is: ' + str(refMin)
我会重构它,只读取一次文件:
在这里,我存储了每年的所有值,这些值可能对其他用途有用,也可能完全无用。你知道吗
读取器只能迭代一次。第一次在
for i in range(1968,2014)
循环中,您使用阅读器中的每一项。所以在第二次循环中,没有项目了。你知道吗如果要将
i
的每一个值与文件中的每一行进行比较,可以交换循环,使循环for row in reader
位于外部,只运行一次,而不是多次运行i
循环。或者你可以每次创建一个新的阅读器,尽管这可能会比较慢。你知道吗如果要一次性处理整个文件,则需要创建一个值字典来替换refMin。处理每一行时,可以遍历字典键,也可以基于当前行进行查找。另一方面,如果您愿意多次读取文件,只需将行
reader = csv.reader(...)
移到外循环中即可。你知道吗以下是一个未经测试的一次性方法:
defaultdict
就像一个普通的字典,只是它有一个以前没有设置的键的默认值。你知道吗相关问题 更多 >
编程相关推荐