You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python转换列表文本为Terraform HCL格式时引号错误求助

解决Python转换文本到Terraform HCL格式的字符拆分错误问题

问题背景

需要将input.txt中的键值对格式转换为Terraform所需的HCL列表格式,要求每个列表元素包裹双引号,但当前运行Python代码后,生成的output.txt中出现了每个字符被单独加双引号的错误。

输入输出示例

输入文件input.txt

spn-owner-adm = owner, reader, admin, net-admin, str-admin, viewer
spn-net-adm = admin, net-admin, str-admin
spn-str-adm =  str-admin, viewer, compute-admin, viewer, reader
spn-my-adm = owner, admin, viewer, reader

预期输出output.txt

spn-owner-adm = [ "owner", "reader", "admin", "net-admin", "str-admin", "viewer" ]
spn-net-adm = [ "admin", "net-admin", "str-admin" ]
spn-str-adm = [ "str-admin", "viewer", "compute-admin", "viewer", "reader" ]
spn-my-adm = [ "owner", "admin", "viewer", "reader" ]

实际错误输出

spn-owner-adm  = [" ""o""w""n""e""r""," " "r""e""a""d""e""r""," " "a""d""m""i""n""," " "n""e""t""-""a""d""m""i""n""," " "s""t""r""-""a""d""m""i""n""," " "v""i""e""w""e""r" ]
spn-net-adm  = [" ""a""d""m""i""n""," " "n""e""t""-""a""d""m""i""n""," " "s""t""r""-""a""d""m""i""n" ]
spn-str-adm  = [" "" ""s""t""r""-""a""d""m""i""n""," " "v""i""e""w""e""r""," " "c""o""m""p""u""t""e""-""a""d""m""i""n""," " "v""i""e""w""e""r""," " "r""e""a""d""e""r" ]
spn-my-adm  = [" ""o""w""n""e""r""," " "a""d""m""i""n""," " "v""i""e""w""e""r""," " "r""e""a""d""e""r" ]

错误原因分析

原代码中,spnrglist是按等号拆分后的字符串,直接遍历该字符串会把每个字符当作独立元素处理,导致每个字符被包裹双引号。正确的做法应该是先将字符串按逗号分割为元素列表,再处理每个元素的空格并添加双引号。

修复后的Python代码

#!/usr/bin/env python3
import re

myspn_pattn = r"^spn-.*-adm.*$"
myfile = "input.txt"

with open(myfile, 'r') as fsp, open('output.txt', 'w+') as fspn:
    fspn.write("spn =   {" "\n\n")
    for myspn in fsp:
        # 匹配目标行,同时去除首尾换行符
        myspn_stripped = myspn.strip()
        spnmatch = re.findall(myspn_pattn, myspn_stripped)
        if spnmatch:
            line = spnmatch[0]
            # 拆分键和值部分,处理可能的多空格
            spnname, spnrglist_str = [part.strip() for part in line.split('=', 1)]
            # 按逗号拆分值,去除每个元素的空格,过滤空元素
            spnrglist = [item.strip() for item in spnrglist_str.split(',') if item.strip()]
            # 给每个元素添加双引号,并用逗号+空格连接
            formatted_list = ', '.join([f'"{item}"' for item in spnrglist])
            # 拼接成HCL格式的行
            spnup = f"{spnname} = [ {formatted_list} ]\n"
            fspn.write(spnup)
    fspn.write("\n")
    fspn.write("\t" "}")

修复后验证结果

运行修复后的代码,生成的output.txt将完全符合预期的HCL列表格式,每个元素正确包裹双引号,无字符拆分错误。

内容的提问来源于stack exchange,提问作者sai_2121

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 09:57:05