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

如何将Python print函数输出的数组内容打印为单行格式

问题描述

当前用Python的print函数输出内容如下:

'name': 'testfail2222',
'tags': ['customer:google',
         'probe_dc:aws:us-west-1',
         'check_type:api',
         'check_status:paused',
         'ci_execution_rule:non_blocking'],

期望将其格式化为单行输出:

'name': 'testfail2222',  
'tags':  ['customer:google','probe_dc:aws:us-west-1','check_type:api','check_status:paused','ci_execution_rule:non_blocking'],

用户采用先保存print输出到文件,再格式化文件内容的方式,已编写以下Python代码,需调整以实现需求:

import os, json, re, sys
from itertools import islice
from datadog_api_client import ApiClient, Configuration
from datadog_api_client.v1.api.monitors_api import MonitorsApi

configuration = Configuration()
with ApiClient(configuration) as api_client:
    api_instance = MonitorsApi(api_client)
    response = api_instance.list_monitors(
            monitor_tags="check_status:paused"
    )

    sourceFile = open('printoutput.json', 'w')
    print(response, file = sourceFile)
    sourceFile.close()

    with open('printoutput.json', "r") as input:
            with open("temp.json", "w") as output:
            # iterate all lines from file
            for line in input:
                # if substring contain in a line then don't write it
                if "            'name': '" not in line.strip("\n"):
                    output.write(line)

    # replace file with original name
    os.replace('temp.json', 'printoutput.json')

    patrn = "'tags': [[\^[]]*]"
    word= "'name': "
    with open('printoutput.json','r') as file:
        for line in file:
            if word in line:
                print(line,  end="", flush=True)
            if re.search(patrn, line):
                print(line, end="")
解决方案

现有代码绕了弯路,且正则表达式错误,直接从API响应处理更高效,不用先存文件再解析。以下是两种实现方式:

方法一:直接处理API响应(推荐)

跳过文件存储步骤,直接从返回的Python对象中提取字段,按要求格式输出:

import os, json, re, sys
from datadog_api_client import ApiClient, Configuration
from datadog_api_client.v1.api.monitors_api import MonitorsApi

configuration = Configuration()
with ApiClient(configuration) as api_client:
    api_instance = MonitorsApi(api_client)
    response = api_instance.list_monitors(
            monitor_tags="check_status:paused"
    )

    # 遍历每个监控项(response为监控对象列表)
    for monitor in response:
        name = monitor.get('name', '')
        tags = monitor.get('tags', [])
        # 将tags列表格式化为单行字符串
        tags_str = "['" + "','".join(tags) + "']"
        # 按目标格式输出
        print(f"'name': '{name}',  ")
        print(f"'tags':  {tags_str},")

方法二:通过文件处理(若坚持原有流程)

修复正则和处理逻辑,重新实现文件格式化:

import os, re
from datadog_api_client import ApiClient, Configuration
from datadog_api_client.v1.api.monitors_api import MonitorsApi

configuration = Configuration()
with ApiClient(configuration) as api_client:
    api_instance = MonitorsApi(api_client)
    response = api_instance.list_monitors(
            monitor_tags="check_status:paused"
    )

    # 保存响应到文件
    with open('printoutput.json', 'w') as sourceFile:
        print(response, file=sourceFile)

    # 读取文件并格式化
    with open('printoutput.json', 'r') as input_file, open('formatted_output.txt', 'w') as output_file:
        in_tags_block = False
        tags_lines = []
        for line in input_file:
            stripped_line = line.strip()
            # 匹配name行并输出
            if "'name': '" in stripped_line:
                output_file.write(f"{stripped_line},  \n")
            # 匹配tags起始行,开始收集tags
            elif "'tags': [" in stripped_line:
                in_tags_block = True
                first_tag = stripped_line.split('[', 1)[1].rstrip(',')
                tags_lines.append(first_tag)
            # 匹配tags结束行,拼接输出
            elif in_tags_block and '],' in stripped_line:
                in_tags_block = False
                last_tag = stripped_line.lstrip().rstrip('],')
                tags_lines.append(last_tag)
                # 清理标签内容并拼接成单行
                cleaned_tags = [t.strip().strip("'") for t in tags_lines]
                tags_str = "['" + "','".join(cleaned_tags) + "']"
                output_file.write(f"'tags':  {tags_str},\n")
            # 收集tags中间行
            elif in_tags_block:
                tag = stripped_line.rstrip(',')
                tags_lines.append(tag)

    # 替换原文件(可选)
    os.replace('formatted_output.txt', 'printoutput.json')

    # 打印最终结果
    with open('printoutput.json', 'r') as file:
        print(file.read())

关键修改说明

  1. 正则修正:原正则表达式完全错误,改为通过行匹配识别tags块,更可靠易维护。
  2. 直接处理响应:API返回的response是Python对象(列表/字典),直接提取字段比解析字符串文件效率高,避免格式解析问题。
  3. tags格式化:用"','".join(tags)快速将列表元素拼接成逗号分隔的字符串,再包裹方括号和单引号,直接得到单行格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 12:35:03