首页 > 解决方案 > ValueError: int() 以 10 为底的无效文字:':'

问题描述

我正在使用 jupyter python 3。我试图从 .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: ':'

标签: pythonpython-3.xtraveling-salesman

解决方案


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

DIMENSION文件中的和的两行EDGE_WEIGHT_TYPE没有:紧随其后的名称,但中间有一些额外的空格,因此split()将在每个空格处将这些行分成三部分,例如:

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

您正在选择第二部分,它不能被解释为int。您希望在将行拆分后始终保留行的第二部分:,而不是 by ,这split(':')对您有用,例如:

['DIMENSION ', ' 52']

多余的空格可以.strip()在这些行之后通过调用来删除,但int也可以在没有的情况下接受它。

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

这仍然会删除包含 extra 的字段:,但我认为这种特殊情况对您来说并不那么重要。


推荐阅读