ValueError:以10为底的int()的无效文字:':'

时间:2019-09-01 18:25:01

标签: python python-3.x traveling-salesman

我正在使用jupyter python3。我试图从.tsp文件导入数据,但是它一直向我显示此错误。我看到有些人遇到了同样的问题,由于转换,他们解决了该问题,但是在我的密码

NAME: berlin52
TYPE: TSP
COMMENT: 52 locations in Berlin (Groetschel)
DIMENSION : 52
EDGE_WEIGHT_TYPE : EUC_2D
NODE_COORD_SECTION
1 565.0 575.0
2 25.0 185.0
3 345.0 750.0
4 945.0 685.0
5 845.0 655.0
6 880.0 660.0
7 25.0 230.0
8 525.0 1000.0
9 580.0 1175.0
10 650.0 1130.0
# Open input file
infile = open(r'C:\Users\13136\OneDrive\Desktop\AI\berlin52.tsp')

# Read instance header
Name = infile.readline().strip().split()[1] # NAME
FileType = infile.readline().strip().split()[1] # TYPE
Comment = infile.readline().strip().split()[1] # COMMENT
Dimension = infile.readline().strip().split()[1] # DIMENSION
EdgeWeightType = infile.readline().strip().split()[1] # EDGE_WEIGHT_TYPE
infile.readline()

# Read node list
nodelist = []
N = int(Dimension)
for i in range(0, int(Dimension)):
    x,y = infile.readline().strip().split()[1:]
    nodelist.append([float(x), float(y)])

# Close input file
infile.close()
ValueError                                Traceback (most recent call last)
<ipython-input-22-5e3fe725955a> in <module>
     12 # Read node list
     13 nodelist = []
---> 14 N = int(Dimension)
     15 for i in range(0, int(Dimension)):
     16     x,y = infile.readline().strip().split()[1:]

ValueError: invalid literal for int() with base 10: ':'

1 个答案:

答案 0 :(得分:1)

Name = infile.readline().strip().split(':')[1] # NAME
FileType = infile.readline().strip().split(':')[1] # TYPE
Comment = infile.readline().strip().split(':')[1] # COMMENT
Dimension = infile.readline().strip().split(':')[1] # DIMENSION
EdgeWeightType = infile.readline().strip().split(':')[1] # EDGE_WEIGHT_TYPE

文件DIMENSIONEDGE_WEIGHT_TYPE的两行名称后没有紧跟:,但它们之间还有一些额外的空间,因此split()将被拆分这些线在每个空间分为三个部分,例如:

['DIMENSION', ':', '52']

您正在选择第二部分,该部分不能解释为int。您希望在用:而不是为您完成的行{,split(':')拆分行之后始终保留行的第二部分,例如:

['DIMENSION ', ' 52']

可以在这些行之后通过.strip()调用来删除多余的空格,但是int也可以不使用它。

Dimension = infile.readline().split(':')[1].strip()

这仍然会切掉包含额外的:的字段,但是我想这种特殊情况在这里对您来说并不那么重要。