【问题标题】:Retrieving coordinates from a text file with Python使用 Python 从文本文件中检索坐标
【发布时间】:2016-01-09 19:58:26
【问题描述】:

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

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 an re.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),但我不知道该怎么做。

【问题讨论】:

  • 如何您想使用它们?你没有告诉我们。
  • 抱歉,我不够具体。我想使用 x 和 y 坐标来绘制一个点,如下所示:Point(x, y)

标签: python coordinates


【解决方案1】:

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

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

  1. , 处拆分所有行
  2. 将列表项组合成元组

所以让我们这样做吧。注意:由于 stackexchange 单方面更改了他们的条款,自 2016 年 1 月 1 日起在此处发布的代码是 MIT 许可的,除非我这么说。我是这么说的。下面的代码是 CC-by-SA,如果你不相信我,它甚至不是代码,它是我文本的一部分,每个部分都是 CC-by-SA。感谢 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]

【讨论】:

  • 谢谢!这为我完成了这项工作。
【解决方案2】:

在这种情况下为什么需要正则表达式?

>>> 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]]

【讨论】:

    猜你喜欢
    • 2022-06-27
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 2012-11-22
    • 2018-11-08
    • 2011-06-02
    相关资源
    最近更新 更多