从区域(AWS/GCloud)中提取区域名称的Pythonic方法

问题描述 投票:0回答:3

我是 Python 新手,我想知道从区域名称中提取区域名称的最佳方法是什么。

例如:

GCP:

 - us-east1-c
 - europe-west2-b

AWS:

 - eu-west-2
 - ap-northeast-1

在 bash 中,我会使用:

echo "zone"|rev|cut -f2- -d-|rev"

在Python中,我使用:

'-'.join(zone.split('-')[:-1]),

我知道这并不重要,但我想以Pythonic的方式来做。

提前致谢!

哦,预期输出是如果区域是 us-east1-b

美国东部1

python list extract
3个回答
1
投票

我认为使用

rsplit
就足够了:

zone = 'us-east1-b'
print(zone.rsplit('-', 1)[0])
# us-east1

或者简单地

split
即可:

zone = 'us-east1-b'
lst = zone.split('-')
print("{}-{}".format(lst[0], lst[1]))
# us-east1

0
投票

好的,根据您的评论,我看到

String slicing
将为您完成这项工作。 阅读更多相关信息这里

试试这个 -

print "us-east1-b"[:-2]


0
投票

我知道,我有点晚了,只是在寻找相同问题解决方案时遇到了这个问题。

我想没有直接的方法可以做到这一点。很遗憾。 是的,之前的一些答案可能有效,但只是部分有效。并不适合所有情况。 因为有一些更复杂的区域,例如“ap-southeast-1-bkk” 像“

[:-2]
”、“
.split('-')[specific_index]
”、“
.rsplit('-', 1)[0]
”之类的东西在那里不起作用。

您可以尝试将这些方法结合起来,例如

"-".join(zone.split('-')[0:3])[0:-1]
。它适用于“us-east-1-phl-1a”之类的内容。但对于像“ap-southeast-1-bkk-1a”之类的东西就不行了。

Idk,似乎只有一种 100% 正确的方法 - 使用正则表达式。我不是这方面的专家,所以也许有人会纠正这个例子。我已经在两个完全不同的区域测试了以下示例,似乎有效:

zone = "ap-southeast-1-bkk-1a"
zone2 = "us-east-1a"
region_regex = r'(.*?-\d+)'
match1 = re.match(region_regex, zone)
match2 = re.match(region_regex, zone2)
match1.group(1), match2.group(1)
# ('ap-southeast-1', 'us-east-1')

当然,它不会从 us-east1-b 变成 us-east1。不知道您提出问题时 AWS 区域是如何命名的,但现在是“us-east-1d”,不是吗?如果这是它在 Google Cloud 中的命名方式,我想您需要一些额外的工作来适应您的情况的正则表达式公式,并分别为每个云使用它们。

© www.soinside.com 2019 - 2024. All rights reserved.