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
相关产品推荐
相关产品推荐

