Python 3.x 如何创建一个行列表,直到一个单词出现在行中,然后再次开始一个新的行列表,直到一个单词出现
我有一个有坐标线的文件Python 3.x 如何创建一个行列表,直到一个单词出现在行中,然后再次开始一个新的行列表,直到一个单词出现,python-3.x,Python 3.x,我有一个有坐标线的文件 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将是第二个列表,等等 那么我如何创建一个循环或其他东西,以便它附加一个列表,直到它
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,第二个coords2,。。。。合作社
这就是我所拥有的,但这只会不断更新“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])
您的问题是,您总是将内部列表附加到同一个列表-您需要一个级别的嵌套:
“段”
-在结果中添加一个新的内部列表[[[-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'
停止,您的最后一个列表元素将是空的。我如何使它变成这样的输出…[[(-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)]您将坐标添加到元组中,而不是列表:结果[-1].append((lat,lon))
…这可能会有帮助:和
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]]]