使用Python从文本文件中检索坐标



我有一个带坐标的文本文件,格式如下:

158,227,,396,226,,487,138,,473,48,,145,55,,139,133,,159,229
413,289,,547,156,,526,26,,140,10,,85,147,,115,245,,415,291
295,175,,292,293

使用strip-anre.sub,我得到了这样的结果:

import re
with open('test.txt') as f:
    for line in f:
        line.strip()
        line = re.sub(r',,', ' ', line)
        print line
158,227 396,226 487,138 473,48 145,55 139,133 159,229
413,289 547,156 526,26 140,10 85,147 115,245 415,291
295,175 292,293

我想使用那些坐标对(x,y),但我不知道该怎么做。

您的字符串替换并不能帮助您从中获取数字。老实说,这会使事情变得复杂。

这里最直观的方法肯定是:

  1. ,拆分所有线路
  2. 将列表项组合为元组

让我们这样做吧。注意:由于stackexchange单方面更改了他们的条款,自2016年1月1日起发布在这里的代码是MIT许可的,除非我这么说。我确实这么说。下面的代码是SA的CC,如果你不相信我,它甚至不是代码,它是我文本的一部分,SA在每一部分都是CC。感谢SE注意到这一点。

首先,让我们进行拆分

with open('test.txt') as f:
    for line in f:
        items = line.split()

现在,让我们将坐标组合成元组。我们只关心第一个和第二个坐标,然后向前跳三个,以此类推。这就是[start:stop:step]语法的作用。zip获取多个可迭代项,并将它们按元素组合为元组。

tuples_of_strings = zip(coordinates[0::3], coordinates[1::3])

然后,您可能想要生成该的Point(x,y)对象

points = [Point(float(tup[0]), float(tup[1])) for tup in tuples_of_strings]

为什么在这种情况下需要regex?

>>> with open('file') as f:
...     t = f.read().replace('n', ',,')
>>> [[int(j) for j in i.split(',')] for i in t.split(',,') if i]
[[158, 227],
 [396, 226],
 [487, 138],
 [473, 48],
 [145, 55],
 [139, 133],
 [159, 229],
 [413, 289],
 [547, 156],
 [526, 26],
 [140, 10],
 [85, 147],
 [115, 245],
 [415, 291], 
 [295, 175], 
 [292, 293]]

最新更新