回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我试图用PYTHON计算带有RLE(运行长度编码)格式数字的文件的面积。我的FOR和IF语句有问题。你知道吗</p>
<p><a href="https://i.stack.imgur.com/h8p9q.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/h8p9q.jpg" alt="enter image description here"/></a></p>
<p>我试图计算包含值201的单元格的面积。你知道吗</p>
<blockquote>
<p>My current error:</p>
</blockquote>
<pre><code>Traceback (most recent call last):
File "D:\2016-2017\Fall2016\SpatialDataStructures\Labs\Lab4\Area_Calc_from_RLE.py", line 68, in <module>
if cellValuesAsIntList[i] == 201:
IndexError: string index out of range
</code></pre>
<blockquote>
<p>Here is the file I am working with:</p>
</blockquote>
<pre><code>ncols 40
nrows 40
xllcorner -2.3036649208516
yllcorner -1.1518324594945
cellsize 25
NODATA_value -9999
13, 0, 1, 201, 26, 0, 1, 3, 12, 0, 1, 201, 39, 0, 1, 201, 39, 0, 1, 201, 39, 0, 2, 201, 33, 0, 4, 501, 2, 0, 2, 201, 32, 0, 4, 501, 3, 0, 3, 201, 29, 0, 5, 501, 5, 0, 2, 201, 26, 0, 7, 501, 6, 0, 1, 201, 25, 0, 8, 501, 6, 0, 1, 201, 25, 0, 7, 501, 7, 0, 1, 201, 25, 0, 6, 501, 8, 0, 1, 201, 25, 0, 6, 501, 8, 0, 1, 201, 6, 0, 4, 102, 15, 0, 7, 501, 7, 0, 1, 201, 6, 0, 6, 102, 14, 0, 7, 501, 5, 0, 2, 201, 6, 0, 6, 102, 15, 0, 6, 501, 5, 0, 1, 201, 7, 0, 5, 102, 16, 0, 6, 501, 5, 0, 1, 201, 7, 0, 4, 102, 18, 0, 8, 501, 2, 0, 5, 201, 3, 0, 3, 102, 19, 0, 9, 501, 5, 0, 2, 201, 25, 0, 8, 501, 6, 0, 1, 201, 29, 0, 4, 501, 6, 0, 1, 201, 29, 0, 4, 501, 6, 0, 1, 201, 9, 0, 1, 501, 5, 102, 15, 0, 2, 501, 7, 0, 1, 201, 9, 0, 6, 102, 23, 0, 2, 201, 8, 0, 1, 501, 6, 102, 3, 0, 4, 202, 15, 0, 2, 201, 4, 0, 6, 501, 6, 102, 2, 0, 2, 202, 2, 0, 8, 202, 5, 0, 4, 201, 4, 0, 8, 501, 4, 102, 3, 0, 1, 202, 5, 0, 2, 202, 3, 0, 6, 202, 1, 201, 7, 0, 8, 501, 2, 102, 1, 501, 21, 0, 1, 201, 6, 0, 11, 501, 22, 0, 1, 201, 6, 0, 8, 501, 25, 0, 1, 201, 6, 0, 8, 501, 25, 0, 1, 201, 1, 101, 5, 0, 8, 501, 25, 0, 1, 201, 1, 101, 5, 0, 8, 501, 14, 0, 3, 101, 8, 0, 1, 201, 1, 101, 5, 0, 11, 501, 12, 0, 4, 101, 6, 0, 2, 201, 1, 101, 4, 0, 12, 501, 11, 0, 4, 101, 6, 0, 1, 101, 1, 201, 1, 101, 4, 0, 12, 501, 21, 0, 1, 101, 1, 201, 5, 0, 11, 501, 23, 0, 1, 201, 5, 0, 8, 501, 26, 0, 1, 201, 5, 0, 8, 501, 26, 0, 1, 201, 5, 0, 7, 501, 27, 0, 1, 201, 5, 0, 8, 501, 8, 0
</code></pre>
<blockquote>
<p>This is my code:</p>
</blockquote>
<pre><code>fi = open(r'D:\2016-2017\Fall2016\SpatialDataStructures\Labs\Lab4\Data\AsRLE.txt','r')
fileLines = fi.readlines()
fi.close
#---------------------------------------------------------------------
#---------------------------------------------------------------------
#Populated variables required for code from fileLines variable
cellValuesAsString = []
lineNum = 0
for line in fileLines: # for each line the FileLines List
# get number of cols, ncols, i.e. the 1st line in the file
if lineNum == 0:
ncols = int(line[14:])
# get number of rows, nrows, i.e. the 2nd line in the file
elif lineNum == 1:
nrows = int(line[14:])
# get cell size, cellsize, i.e. the 5th line in the file
elif lineNum == 4:
cellsize = int(line[14:])
# get cell values in RLE format as String, , i.e. the 7th line in the file
elif lineNum == 6:
cellValuesAsString = line
lineNum = lineNum + 1
# removes spaces
cellValuesAsString = cellValuesAsString.replace(" ", "")
# convert string into a list of strings split by comma
cellValuesAsStringList = cellValuesAsString.split(',')
# convert strings to integers
cellValuesAsIntList = cellValuesAsStringList
for index, item in enumerate(cellValuesAsStringList):
cellValuesAsIntList[index] = int(cellValuesAsStringList[index])
#---------------------------------------------------------------------
#THIS IS WHERE YOU WRITE YOUR CODE
#---------------------------------------------------------------------
cellCode = 201
codeArea = 0
area = 0
npixels = 0
i = 1
for cellValuesAsIntList in line:
if cellValuesAsIntList[i] == 201:
b = cellValuesAsIntList[i-1]
npixels = npixels + b
else:
i=i+2
print npixles
print "Area: " + npixels * cellSize
</code></pre>