来自 Python 脚本的回溯:无效文字
Traceback from a Python Script: invalid literal
简而言之,Python脚本应该做的是加载和计算ASCII类型的文件。
对于一些以前预处理过的文件,它可以正常工作,而对于我的文件,它会抛出错误。无论如何,看起来我的文件与它应该的不同(输入方面)。
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'
*在任何QGIS/ArcGIS软件中都不是运行,只是来自cmd或IDLE。
编辑
只是一小部分代码:
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...")
这里的错误很明显。
'nrows'
无法 转换为 int
.
出于某种原因,您称此 type_rows
不是有效整数的字符串表示形式,而是似乎包含字符串 'nrows'
。
例如:
>>> type_rows = "nrows"
>>> int(type_rows)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'nrows'
>>>
你正在分裂单 spaces:
option= []
for elem in content:
option.extend(elem.strip().split(" "))
你有一个额外的 space 某处,所以你所有的偏移量都是一个。
你可以通过简单地*删除 str.split()
的参数来解决这个问题。然后文本将自动被剥离,并按 任意宽度 白色 space 拆分。如果文件中有 1 或 2 或 20 spaces 则无关紧要:
with open("options_PDI.txt") as f:
option = f.read().split()
请注意,我什至懒得将文件分成几行或去掉换行符。
请注意,您对文件的处理仍然相当脆弱;您期望某些值存在于某些位置。如果您的文件包含 label value
样式行,您可以将整个文件读入字典:
with open("options_PDI.txt") as f:
options = dict(line.strip().split(None, 1) for line in f if ' ' in line)
并使用该字典来处理各种值:
type_ncols = int(options['ncols'])
简而言之,Python脚本应该做的是加载和计算ASCII类型的文件。
对于一些以前预处理过的文件,它可以正常工作,而对于我的文件,它会抛出错误。无论如何,看起来我的文件与它应该的不同(输入方面)。
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'
*在任何QGIS/ArcGIS软件中都不是运行,只是来自cmd或IDLE。
编辑
只是一小部分代码:
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...")
这里的错误很明显。
'nrows'
无法 转换为 int
.
出于某种原因,您称此 type_rows
不是有效整数的字符串表示形式,而是似乎包含字符串 'nrows'
。
例如:
>>> type_rows = "nrows"
>>> int(type_rows)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'nrows'
>>>
你正在分裂单 spaces:
option= []
for elem in content:
option.extend(elem.strip().split(" "))
你有一个额外的 space 某处,所以你所有的偏移量都是一个。
你可以通过简单地*删除 str.split()
的参数来解决这个问题。然后文本将自动被剥离,并按 任意宽度 白色 space 拆分。如果文件中有 1 或 2 或 20 spaces 则无关紧要:
with open("options_PDI.txt") as f:
option = f.read().split()
请注意,我什至懒得将文件分成几行或去掉换行符。
请注意,您对文件的处理仍然相当脆弱;您期望某些值存在于某些位置。如果您的文件包含 label value
样式行,您可以将整个文件读入字典:
with open("options_PDI.txt") as f:
options = dict(line.strip().split(None, 1) for line in f if ' ' in line)
并使用该字典来处理各种值:
type_ncols = int(options['ncols'])