如何创建行列表,直到单词出现在行中,然后再次开始新的行列表,直到单词出现

时间:2019-05-15 19:30:26

标签: 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将是第二个列表,等等...

那么我该如何创建一个循环或类似的东西,以使其附加一个列表,直到到达“ 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])

1 个答案:

答案 0 :(得分:1)

您的问题是您始终将内部列表追加到同一列表中-您需要一层嵌套 more

  1. 创建列表列表,
  2. 重复您的文件行,
    1. 将线分割成多个坐标(我想将它们按顺序混合起来,请检查)
    2. 将每个坐标添加到列表
  3. 将每个行列表添加到结果的最后一个内部列表中
  4. 如果您点击了新的'Segment'-在结果中添加新的内部列表
  5. 继续直到完成:

创建文件:

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'结尾,则您的最后一个列表元素将为空。