首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python对流层:如何组合包含Join的两个字符串

Python对流层:如何组合包含Join的两个字符串
EN

Stack Overflow用户
提问于 2017-02-27 06:10:18
回答 1查看 1.4K关注 0票数 2

我正在使用troposhere库,并尝试组合两个具有Join的string对象:

代码语言:javascript
复制
from troposphere import Join

str1 = Join('', ["""
sed -i -e '/hostname/s/=.*/=example.com/' /tmp/file.app
\n"""])

代码语言:javascript
复制
str2 = Join('', ["""
sed -i -e '/IP/s/=.*/=192.168.100.100/' /tmp/file.app
\n"""])

我尝试使用以下命令将它们组合起来:

代码语言:javascript
复制
str3 = str1 + str2
and
str1 += str2

但不幸的是,我得到了以下错误:

代码语言:javascript
复制
TypeError: unsupported operand type(s) for +: 'Join' and 'Join'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-27 06:29:59

在Join之前使用字符串连接:

您可以在创建Join之前仅应用字符串连接:

代码语言:javascript
复制
from troposphere import Join

str1 = """
sed -i -e '/hostname/s/=.*/=example.com/' /tmp/file.app
\n"""

str2 = """
sed -i -e '/IP/s/=.*/=192.168.100.100/' /tmp/file.app
\n"""

str3 = str1.strip()+str2

join1, join2, join3 = [Join('', [cmd]) for cmd in (str1, str2, str3)]

print join3.data
# {'Fn::Join': ['', ["sed -i -e '/hostname/s/=.*/=example.com/' /tmp/file.app\nsed -i -e '/IP/s/=.*/=192.168.100.100/' /tmp/file.app\n\n"]]}

定义联接添加:

下面是Join类的定义:

代码语言:javascript
复制
class Join(AWSHelperFn):
    def __init__(self, delimiter, values):
        validate_delimiter(delimiter)
        self.data = {'Fn::Join': [delimiter, values]}

要定义join_a + join_b,您可以使用:

代码语言:javascript
复制
from troposphere import Join


def add_joins(join_a, join_b):
    delimiter = join_a.data['Fn::Join'][0]
    str_a = join_a.data['Fn::Join'][1][0]
    str_b = join_b.data['Fn::Join'][1][0]

    return Join(delimiter, [str_a.strip() + str_b])

Join.__add__ = add_joins

str1 = """
sed -i -e '/hostname/s/=.*/=example.com/' /tmp/file.app
\n"""

str2 = """
sed -i -e '/IP/s/=.*/=192.168.100.100/' /tmp/file.app
\n"""

join1 = Join('', [str1])
join2 = Join('', [str2])

print (join1 + join2).data
# {'Fn::Join': ['', ["sed -i -e '/hostname/s/=.*/=example.com/' /tmp/file.app\nsed -i -e '/IP/s/=.*/=192.168.100.100/' /tmp/file.app\n\n"]]}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42474842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档