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,第二个 coords2,.... coordsn
这就是我所拥有的,但这只会不断更新“坐标”,而不是停在“段”并打开一个新的坐标列表......
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])
解决方案
您的问题是您始终将内部列表附加到同一个列表 - 您需要更多的嵌套级别:
- 创建列表列表,
- 迭代你的文件行,
- 将线分成坐标(我认为您将它们按顺序混合,请检查)
- 将每个坐标添加到列表中
- 将每个行列表添加到结果的最后一个内部列表
- 如果你打了一个新的
'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'
元素将为空。
推荐阅读
- stat - 通过 RSEM 分析获得的关于 XXX.cnt 的信息
- github - 如何使用 Github Actions 进行 SFTP?
- javascript - 尝试在javascript中生成消息时由于某种原因在我的代码中解析错误
- android - 在通知通道上设置声音不会播放我的自定义声音(而是播放另一种声音)
- node.js - 如何启动我在 git repo 中找到的代码
- javascript - 不和谐的 ping 命令
- javascript - 如何将对象数组转换为仅由值组成的对象
- javascript - 当我使用“javascript: return false;”时出现“SyntaxError: return not in function” 在
- git - Git:rm 文件不在当前工作目录中(使用 cmd/batch)
- css - 如何绘制 fontawesome 图标的内部颜色(不是字体颜色)以避免透明度?