[英]How to Sort .txt File Items in a List
我在列表data
中有一组 2 个点(0 和 1)的坐标:
data: [0 [834.5, 211.5]][1 [941.5, 362.5]]\n
[0 [834.5, 213.5]][1 [943.0, 362.5]]\n
[0 [825.0, 206.0]][1 [961.5, 360.0]]\n
[0 [814.0, 201.0]][1 [973.5, 358.5]]\n
[0 [813.0, 200.5]][1 [973.5, 357.5]]\n
[0 [779.0, 184.0]][1 [992.5, 358.0]]\n
[0 [758.0, 174.0]][1 [993.5, 366.0]]\n
[0 [758.0, 173.5]][1 [992.5, 366.5]]\n
[0 [714.5, 160.0]][1 [991.0, 391.0]]\n
[0 [691.0, 154.5]][1 [1012.0, 372.0]]\n
[0 [690.5, 154.0]][1 [1012.0, 372.0]]\n
[0 [648.0, 157.5]][1 [1012.0, 372.0]]\n
[0 [631.5, 164.0]][1 [1012.0, 372.0]]\n
我需要将列以 834.5 开头的列放在head_x
列表中,将 211.5 放在head_y
列表中,将 941.5 放在foot_x
中,将 362.5 放在foot_y
中。 对于前 9 行,我使用了以下代码:
for i in range(4, len(data), 37):
head_x.append(data[i:i+5])
for i in range(11, len(data), 37):
head_y.append(data[i: i+5])
for i in range(22, len(data), 37):
foot_x.append(data[i: i+5])
for i in range(29, len(data), 37):
foot_y.append(data[i: i+5])
但是,我不确定如何处理像 1012.0 这样的数字。 我试图编写一些代码,如果number > 999
会改变 for 循环,但是每个字符都是整个大列表中的一个元素,所以这不起作用。 我不太确定如何解决这个问题,因此将不胜感激。
这是head_x
的不幸输出:
['834.5', '834.5', '825.0', '814.0', '813.0', '779.0', '758.0', '758.0', '714.5', '691.0', '[690.', ' [648', '0 [63', '[0 [6', '\n[0 [', ']\n[0 ', ']]\n[0', '0]]\n[', '0]]\n[', '0]]\n[', '0]]\n[', '0]]\n[', '0]]\n[', '0]]\n[', '0]]\n[', '0]]\n[', '0]]']
通过使用str.find
方法尝试不同但相似的方法。
在这里,我逐行查找每个数字的开始/结束索引,然后用这些对line
字符串进行切片。 str.find
的第二个参数是它应该开始查找子字符串的索引,因此它会在找到每个数字时逐步移动。
data = r"""[0 [834.5, 211.5]][1 [941.5, 362.5]]\n
[0 [834.5, 213.5]][1 [943.0, 362.5]]\n
[0 [825.0, 206.0]][1 [961.5, 360.0]]\n
[0 [814.0, 201.0]][1 [973.5, 358.5]]\n
[0 [813.0, 200.5]][1 [973.5, 357.5]]\n
[0 [779.0, 184.0]][1 [992.5, 358.0]]\n
[0 [758.0, 174.0]][1 [993.5, 366.0]]\n
[0 [758.0, 173.5]][1 [992.5, 366.5]]\n
[0 [714.5, 160.0]][1 [991.0, 391.0]]\n
[0 [691.0, 154.5]][1 [1012.0, 372.0]]\n
[0 [690.5, 154.0]][1 [1012.0, 372.0]]\n
[0 [648.0, 157.5]][1 [1012.0, 372.0]]\n
[0 [631.5, 164.0]][1 [1012.0, 372.0]]\n"""
head_x = []
head_y = []
foot_x = []
foot_y = []
for line in data.splitlines():
left = 4
right = line.find(",", left)
head_x.append(line[left:right])
left = right + 2
right = line.find("]", left)
head_y.append(line[left:right])
left = line.find(" [", right) + 2
right = line.find(",", left)
foot_x.append(line[left:right])
left = right + 2
right = line.find("]", left)
foot_y.append(line[left:right])
print(head_x)
head_x
的幸运输出:
['834.5', '834.5', '825.0', '814.0', '813.0', '779.0', '758.0', '758.0', '714.5', '691.0', '690.5', '648.0', '631.5']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.