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

时间:2016-01-09 11:22:46

标签: python coordinates

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

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和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),但我不知道如何做到这一点。

2 个答案:

答案 0 :(得分:1)

您的字符串替换无法帮助您从中获取数字。说实话,它使事情变得复杂。

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

  1. 拆分public class Test { JFrame myMainWindow = new JFrame("This is my title"); JPanel firstPanel = new JPanel(null); JTextField textfield1 = new JTextField(); JButton button1 = new JButton("Check Company"); public void runGUI() { myMainWindow.setBounds(10, 10, 500, 500); myMainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); myMainWindow.setLayout(new GridLayout(1,1)); createFirstPanel(); myMainWindow.getContentPane().add(firstPanel); myMainWindow.setVisible(true); } public void createFirstPanel() { textfield1.setBounds(335,102,90,35); textfield1.setBackground(new Color(255,255,255)); textfield1.setForeground(new Color(0,0,0)); textfield1.setEnabled(true); textfield1.setFont(new Font("sansserif",0,12)); textfield1.setVisible(true); firstPanel.add(textfield1); button1.setBounds(335,150,150,35); button1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { new Class2(textfield1.getText()); } }); firstPanel.add(button1); } public static void main(String[] args) { Test t = new Test(); t.runGUI(); } }
  2. 处的所有行
  3. 将列表项合并到元组
  4. 所以让我们这样做。注意:由于stackexchange单方面更改了他们的条款,自2016年1月1日以来发布的代码是麻省理工学院许可的,除非我这样说。我是这么说的。下面的代码是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)

答案 1 :(得分:1)

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

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