这对你们很多人来说可能超级简单,但我似乎找不到太多关于它的信息。我对此有一个想法,但我觉得我做的比我应该做的要多。我正在尝试以(x1, x2) (y1, y2)格式从文件中读取数据。我的目标是使用值 x1、x2、y1 和 y2 编写距离计算代码。
问题:如何从这个字符串中提取整数?
这对你们很多人来说可能超级简单,但我似乎找不到太多关于它的信息。我对此有一个想法,但我觉得我做的比我应该做的要多。我正在尝试以(x1, x2) (y1, y2)格式从文件中读取数据。我的目标是使用值 x1、x2、y1 和 y2 编写距离计算代码。
问题:如何从这个字符串中提取整数?
这称为序列解包,可以像这样完成
>>> a =(1,2)
>>> x1,x2=a
>>> x1
1
>>> x2
2
>>> b = [[1,2],[2,3]]
>>> (x1,x2),(y1,y2)=b
>>> x1
1
>>> x2
2
>>> y1
2
>>> y2
3
>>>
用正则表达式
>>> import re
>>> s = "(5, 42) (20, -32)"
>>> x1, y1, x2, y2 = map(int, re.match(r"\((.*), (.*)\) \((.*), (.*)\)", s).groups())
>>> x1, y1
(5, 42)
>>> x2, y2
(20, -32)
或没有正则表达式
>>> x1, y1, x2, y2 = (int(x.strip("(),")) for x in s.split())
如果您试图将值从某些列表中取出并放入变量中,这是一种方法。
>>> x1, y1, x2, y2 = [1, 2] + [3, 4]
>>> x1
1
>>> x2
3
>>> y1
2
>>> y2
4
>>>
元组将表现出相同的行为。
x1, y1, x2, y2 = (1, 2) + (3, 4)
以下是如何从文件中读取输入并使用 gnibbler 的正则表达式对其进行解析
import re
with open("myfile.txt", 'r') as file_handle:
for line in file_handle:
x1, y1, x2, y2 = map(int, re.match(r"\((.*), (.*)\) \((.*), (.*)\)", line).groups())
print x1, y1, x2, y2