You need to enable JavaScript to run this app. Python代码移除文本空格时跳过首行仅第二行生效,是什么原因
优惠活动
大模型
产品
解决方案
定价
更多

Python代码移除文本空格时跳过首行仅第二行生效,是什么原因

问题原因
  • 核心错误是代码缩进逻辑错误:用于读取文件做空格清理的with open代码块被放在了遍历data的for循环内部。第一次遍历data时仅写入了第一行内容到test_alerts.txt,此时直接读取文件仅能拿到第一行做处理输出;第二次遍历写入第二行后再读取文件,才能拿到全部两行内容做处理,最终输出结果就会出现第一行被跳过、仅第二行被正确修改的现象。
  • 正则匹配规则不符合需求:当前用的r'\s+'会删除所有空白字符,不符合你仅移除: 和, 后多余空格的要求,还可能误删其他合法空格。
  • 资源管理逻辑混乱:stdout重定向后未及时复位、文件打开后没有主动关闭,会导致缓冲区内容未完全写入文件就被读取的问题。
修正后的代码
import os
import json
import sys
import re

path = sys.argv[1]
# 读取原始JSON文件
with open(path,'r') as f:
    data = json.load(f)

# 预处理删除channels中的alertid字段
for i in data:
    if 'channels' in i:
        temp = i['channels'][0]
        if 'alertid' in temp:
            temp.pop('alertid')

# 先生成原始的|分隔内容
raw_lines = []
for i in data:
    if "channels" in i:
        line = '|'.join([
            json.dumps(i['name']),
            json.dumps(i['apps']),
            json.dumps(i['channels']),
            json.dumps(i['viewid'])
        ])
        raw_lines.append(line)

# 清理空格规则:仅删除冒号、逗号后的所有空白
pattern = re.compile(r'(?<=[:,])\s+')
cleaned_lines = [pattern.sub('', line) for line in raw_lines]

# 写入最终结果到文件
with open("test_alerts.txt","w") as p:
    p.write('\n'.join(cleaned_lines))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 05:15:04