In short, what the Python script is supposed to do is to load and calculate ASCII type files.
With some previously pre-processed files, it works without errors, while with mine it throws an error. In any case, it looks as though my file is different from what it should be (input-wise).
Traceback (most recent call last):
File "D:\TER\Scripts python\PuissantPDI.py", line 124, in <module>
for i in range (42, (42+(int(type_ncols)*int(type_nrows)))):
ValueError: invalid literal for int() with base 10: 'nrows'
*It is not run in any QGIS/ArcGIS software, just from the cmd or IDLE.
EDIT
Just a small part of the code:
import sys
print("\nPDI Processing...\n")
''' OPTION FILE '''
with open("options_PDI.txt") as f:
content = f.readlines()
content = [x.strip('\n') for x in content]
option= []
for elem in content:
option.extend(elem.strip().split(" "))
f.close()
b_type_file=option[1]
b_totalstage_file=option[3]
b_function_file=option[5]
b_state_file=option[7]
b_age_file=option[9]
b_material_file=option[11]
b_occstage_file=option[13]
landcover_file=option[15]
landuse_file=option[17]
transport_file=option[19]
print("Option file loaded...\n")
''' BUILDING TYPE FILE '''
with open(b_type_file) as f:
content = f.readlines()
content = [x.strip('\n') for x in content]
b_type= []
for elem in content:
b_type.extend(elem.strip().split(" "))
f.close()
type_ncols=b_type[9]
type_nrows=b_type[19]
type_xll=b_type[25]
type_yll=b_type[31]
type_pixelsize=b_type[38]
type_nodata=b_type[41]
type_value=[]
for i in range (42, (42+(int(type_ncols)*int(type_nrows)))):
type_value.append(b_type[i])
print("Building type file loaded...")
You are splitting on single spaces:
You have an extra space somewhere, so all your offsets are off-by-one.
You could solve that by simply *removing the argument to
str.split()
. The text will then automatically be stripped, and split on arbitrary width whitespace. It won't matter if there are 1 or 2 or 20 spaces in the file then:Note that I don't even bother with splitting the file into lines or stripping away the newlines.
Note that your treatment of the files is rather fragile still; you are expecting certain values to exist at certain positions. If your files contain
label value
style lines, you can just read the whole file into a dictionary:and use that dictionary to address various values: