Python脚本的回溯:无效的文字

时间:2015-06-14 09:56:05

标签: python ascii traceback

简而言之,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...")

2 个答案:

答案 0 :(得分:1)

你在单个空格上分裂:

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

你在某个地方有一个额外的空间,所以你所有的偏移都是一个接一个。

你可以通过简单地删除str.split()的参数来解决这个问题。然后,文本将被自动剥离,并在任意宽度空格上分割。如果文件中有1个或2个或20个空格则无关紧要:

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'])

答案 1 :(得分:0)

错误在这里引用明显。

'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'
>>>