我有一个带坐标的文本文件,其格式如下:
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)
,但我不知道如何做到这一点。
答案 0 :(得分: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();
}
}
所以让我们这样做。注意:由于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]]