我想从文本文件中导入几个坐标(最多可以添加20.000)。 需要将这些坐标添加到列表中,如下所示:
coords = [[0,0],[1,0],[2,0],[0,1],[1,1],[2,1],[0,2],[1,2],[2,2]]
然而,当我想导入坐标时,我得到了以下错误:
invalid literal for int() with base 10
我无法弄清楚如何正确导入坐标。 有没有人有任何建议为什么这不起作用? 我认为创建整数存在一些问题。 我使用以下脚本:
Bronbestand = open("D:\\Documents\\SkyDrive\\afstuderen\\99 EEM - Abaqus 6.11.2\\scripting\\testuitlezen4.txt", "r")
headerLine = Bronbestand.readline()
valueList = headerLine.split(",")
xValueIndex = valueList.index("x")
#xValueIndex = int(xValueIndex)
yValueIndex = valueList.index("y")
#yValueIndex = int(yValueIndex)
coordList = []
for line in Bronbestand.readlines():
segmentedLine = line.split(",")
coordList.extend([segmentedLine[xValueIndex], segmentedLine[yValueIndex]])
coordList = [x.strip(' ') for x in coordList]
coordList = [x.strip('\n') for x in coordList]
coordList2 = []
#CoordList3 = [map(int, x) for x in coordList]
for i in coordList:
coordList2 = [coordList[int(i)], coordList[int(i)]]
print "coordList = ", coordList
print "coordList2 = ", coordList2
#print "coordList3 = ", coordList3
需要导入的坐标看起来像(这是脚本中的“Bronbestand”):
id,x,y,
1, -1.24344945, 4.84291601
2, -2.40876842, 4.38153362
3, -3.42273545, 3.6448431
4, -4.22163963, 2.67913389
5, -4.7552824, 1.54508495
6, -4.99013376, -0.313952595
7, -4.7552824, -1.54508495
8, -4.22163963, -2.67913389
9, -3.42273545, -3.6448431
因此脚本应该导致:
[[-1.24344945, 4.84291601],[-2.40876842, 4.38153362],[-3.42273545, 3.6448431],[-4.22163963, 2.67913389],[-4.7552824, 1.54508495],[-4.99013376,-0.313952595],[-4.7552824, -1.54508495],[-4.22163963, -2.67913389],[-3.42273545, -3.6448431]]
我也尝试使用本机python csv解析器导入坐标,但这也不起作用。
先谢谢大家的帮助!
答案 0 :(得分:5)
您的数字不是整数,因此转换为int失败。
尝试使用float(i)而不是int(i)来转换为浮点数。
>>> int('1.5')
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
int('1.5')
ValueError: invalid literal for int() with base 10: '1.5'
>>> float('1.5')
1.5
答案 1 :(得分:4)
Other answers已经说明了为什么你的剧本失败了,但是,这里还有另一个问题 - 你正在大力重新发明轮子。
使用the csv
module和list comprehension可以在几行中完成整个过程:
import csv
with open("test.csv") as file:
data = csv.reader(file)
next(data)
print([[float(x) for x in line[1:]] for line in data])
给我们:
[[-1.24344945, 4.84291601], [-2.40876842, 4.38153362], [-3.42273545, 3.6448431], [-4.22163963, 2.67913389], [-4.7552824, 1.54508495], [-4.99013376, -0.313952595], [-4.7552824, -1.54508495], [-4.22163963, -2.67913389], [-3.42273545, -3.6448431]]
我们打开文件,创建一个csv.reader()
来解析csv文件,跳过标题行,然后列出解析为浮点数的数字,忽略第一列。
正如评论中指出的那样,当您处理大量数据时,您可能希望懒洋洋地迭代数据。虽然制作列表很适合测试输出,但一般来说,您可能需要生成器而不是列表。 E.g:
([float(x) for x in line[1:]] for line in data)
请注意,在使用此生成器时,文件将需要保持打开状态(保留在with
块内)。