Traceback from a Python Script: invalid literal
Question: 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...")
    


Answer: You are splitting on single spaces:

    
    
    option= []
    for elem in content:
        option.extend(elem.strip().split(" "))
    

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:

    
    
    with open("options_PDI.txt") as f:
        option = f.read().split()
    

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:

    
    
    with open("options_PDI.txt") as f:
        options = dict(line.strip().split(None, 1) for line in f if ' ' in line)
    

and use that dictionary to address various values:

    
    
    type_ncols = int(options['ncols'])
    

