これは多くの人にとって非常に簡単かもしれませんが、私はそれについて多くを見つけることができないようです. アイデアはありますが、必要以上のことをしているように感じます。(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())
いくつかのリストから値を取得して変数に入れようとしている場合、これが 1 つの方法です。
>>> 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