繁体   English   中英

如何对列表中的 .txt 文件项进行排序

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM