<p>我对程序做了一些修改使它运行起来。要考虑的要点是:</p>
<ul>
<li>任何要进行数字比较的值都必须转换为适当的数据类型,因为如果从csv导入,默认情况下它们将是字符串</li>
<li>要获得最大ph值,您需要检查>;不是<</li>
<li>我已经将每个孔的摘要信息移到了内环之外,这样就不需要检查id是否已更改</li>
<li>我还初始化了外循环中的ave、max、min变量,以便为每个孔重置它们</li>
<li>从您提供的数据来看,水位应该是<code>row2[3]</code>而不是<code>row2[4]</code></li>
<li>我已经删除了检查<code>if row2[1] == '':</code>的逻辑,因为它看起来是多余的。你知道吗</li>
</ul>
<p>以下是修订后的代码:</p>
<pre><code>def height(bReader, dataList):
print("\nIn height function...")
# bReader is bores inside polygon
# dataList BORE_DATA.csv as 2D list
for row in bReader:
# initialise measurements for each bore
avgHeight = 0
minN = 9e99
maxPh = 0
numCount = 0
for row2 in dataList:
if row[0] == row2[0]:
avgHeight += float(row2[3])
numCount += 1
print("Water level: {0}".format(row2[3])) # water level
# Checks the minimum values of Nitrogen
if float(row2[6]) < minN:
minN = float(row2[6])
# Checks the maximum values of Phosphorous
if float(row2[5]) > maxPh:
maxPh = float(row2[5])
# Checks for final value before moving to next bore
aveHeight = avgHeight / numCount
print row[0]
print("Average Water Level: {0}".format(aveHeight))
print("Minimum Nitrogen: {0}".format(minN))
print("Maximum Phosphorous {0}".format(maxPh))
avgHeight = 0
minN = 9e99
maxPh = 0
numCount = 0
# added below for test
import csv
# create file objects and readers
f1, f2 = open('list1.csv', 'rb'), open('list2.csv', 'rb')
r1 = csv.reader(f1, delimiter=',', quotechar='"')
r2 = csv.reader(f2, delimiter=',', quotechar='"')
# create lists from readers
l1 = [[col for col in row] for row in r1]
l2 = [[col for col in row] for row in r2]
# check first couple of rows from lists
print('\nSample data from list 1\n' + '-'*23)
for row in l1[:2]: print(row)
print('\nSample data from list 2\n' + '-'*23)
for row in l2[:3]: print(row)
# call function without headings from first rows
height(l1[1:], l2[1:])
</code></pre>
<p>产生以下输出:</p>
<pre><code>Sample data from list 1
-
['REFERENCE', ' EASTING NORTHING', ' TOC ELEVATION (m)']
['61610628', ' 6489341', ' 20.24']
Sample data from list 2
-
['BORE REF', ' NR BORE NAME', ' SAMPLE DATE', ' water level (m)', ' TDSolids', '(mg/L) pH', ' N (mg/L)', ' P (mg/L)']
['61610628', ' JP20B', ' 23/06/2000', ' 3.71', ' 430', ' 8.8', ' 0.28', ' 0.007']
['61610628', ' JP20B', ' 27/10/2000', ' 3.18', ' 610', ' 7.2', ' 1.3', ' 0.019']
In height function...
Water level: 3.71
Water level: 3.18
61610628
Average Water Level: 3.445
Minimum Nitrogen: 0.28
Maximum Phosphorous 8.8
</code></pre>
<p>希望这能为你解决问题。你知道吗</p>