Jinja将字符串转换为整数

2024-04-20 16:10:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将使用regex解析的字符串转换为一个数字,以便使用Jinja2对其进行乘法运算。此文件是要在ansible脚本中使用的模板。

我有一系列的items,它们都是<word><number>的形式,比如aaa01aaa141bbb05

其思想是解析单词和数字(忽略前导零)并在稍后的模板中使用它们。

我想通过乘法来操作这个数字并使用它。以下是我到目前为止所做的 ```

{% macro get_host_number() -%}
{{ item | regex_replace('^\D*[0]?(\d*)$', '\\1') }}
{%- endmacro %}

{% macro get_host_name() -%}
{{ item | regex_replace('^(\D*)\d*$', '\\1') }}
{%- endmacro %}

{% macro get_host_range(name, number) -%}
{% if name=='aaa' %}
{{ ((number*5)+100) | int | abs }}
{% elif name=='bbb' %}
{{ ((number*5)+200) | int | abs }}
{% else %}
{{ ((number*5)+300) | int | abs }}
{% endif %}
{%- endmacro %}

{% set number = get_host_number() %}
{% set name = get_host_name() %}
{% set value = get_host_range(name, number) %}

Name: {{ name }}
Number: {{ number }}
Type: {{ value }}

使用上面的模板,我得到了一个错误coercing to Unicode: need string or buffer, int found,我认为它告诉我不能将字符串转换为整数,但是我不明白为什么。我见过这样做和工作的例子。


Tags: 字符串name模板hostnumberget数字abs
1条回答
网友
1楼 · 发布于 2024-04-20 16:10:40

在正则表达式编号之后,需要将字符串强制转换为int:

{% set number = get_host_number() | int %}

然后就不需要在| int内部get_host_range宏中。

相关问题 更多 >