我有一个包含坐标线的文件
L1A 10.73 -36.14
L1B 15.30 -54.70
Segment
L2A 17.03 -43.80
L2B 17.90 -49.55
L4A 03.00 -54.00
Segment
L3A 07.80 -36.00
L3B 03.00 -36.00
我想要做的是针对要创建列表的细分词之间的行
因此L1A和L1B将是一个列表,L2A L2B L4A将是第二个列表,等等...
那么我该如何创建一个循环或类似的东西,以使其附加一个列表,直到到达“ Segment”一词,然后打开一个新列表,并附加直到下一个单词“ Segment”,依此类推。
第一个列表将被命名为coords1,第二个列表将被命名为coordsn
这就是我所拥有的,但这只会不断更新“ coords”,而不是停在“ Segment”并打开新的coords列表...
coord = []
with open('kml_coastrica.txt', 'r') as f:
for line in f:
if not 'Segment' in line:
newline = line.split(' ')
lon = int(newline[1])
lat = int(newline[2])
coords.append([lat,lon])
答案 0 :(得分:1)
您的问题是您始终将内部列表追加到同一列表中-您需要一层嵌套 more :
'Segment'
-在结果中添加新的内部列表创建文件:
with open("t.txt","w") as f:
f.write("""L1A 10.73 -36.14
L1B 15.30 -54.70
Segment
L2A 17.03 -43.80
L2B 17.90 -49.55
L4A 03.00 -54.00
Segment
L3A 07.80 -36.00
L3B 03.00 -36.00
""")
处理文件:
result = [[]] # start with an empty inner list
with open("t.txt") as f:
for line in f:
if line.strip() == "Segment":
result.append([]) # add new empty list at end
else:
data = line.strip().split()
lon = float(data[1]) # you need floats - not int's
lat = float(data[2]) # same here: floats
# add data point to last inner list
result[-1].append([lat,lon]) # I think you got them mixed here ?
print(result)
输出:
[[[-36.14, 10.73], [-54.7, 15.3]],
[[-43.8, 17.03], [-49.55, 17.9],
[-54.0, 3.0]], [[-36.0, 7.8], [-36.0, 3.0]]]
如果您的数据以'Segment'
结尾,则您的最后一个列表元素将为空。