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

Python日志清理代码循环中途固定数值处冻结的问题排查请求

代码冻结问题定位与修复方案

核心问题分析

  • 遍历列表时修改列表导致的异常:在for i in m循环中直接调用m.remove(i)会破坏列表迭代器,导致元素被跳过或程序陷入死循环,这是程序卡在固定数值处的根本原因。
  • while循环条件失效:numinList仅在循环前赋值一次,循环内未更新,导致while numinList != 0永远为真,程序无限循环。
  • 正则替换未生效:str.replace(r":\w+:","")是普通字符串替换,不支持正则,无法匹配:单词:格式的表情。
  • 基础语法错误:误写import is应为import os;document变量未定义,函数无法读取目标文件。
  • 文件写入错误:直接用tmp.write(userList)写入列表会抛出类型错误,需转为字符串后写入。
  • 频繁打印拖慢程序:大数据量下每次循环都执行print,会导致控制台假死、程序运行卡顿。

修复后的代码示例

import time
import re
import os

os.system("color")

def spamp2(document_path):
    userList = []
    countertls = 0
    counterpus = 0
    
    # 安全读取文件内容
    with open(document_path, "r", encoding='utf8') as f:
        content = f.read().replace("[breaker]", "")
    
    # 预处理逻辑优化,合并重复操作
    processed = content.replace(" ", "\n")\
                       .replace(":heart:", "")\
                       .replace(":", "🝎\n")
    # 正则替换所有:\w+:格式的表情
    processed = re.sub(r":\w+:","", processed)
    # 清理空格与特殊符号
    processed = processed.replace("  ", " ").replace("  ", " ")\
                        .replace(" ", "🜍").replace("🝎🜍", " ")\
                        .replace("🜍","").replace(":","")
    
    # 去重并过滤空字符串
    m = list(set(processed.splitlines()))
    m = [item for item in m if item.strip()]
    
    print("Running...")
    time.sleep(2)
    
    # 改用pop方式遍历,避免迭代器异常
    while m:
        item = m.pop(0)
        if "🝎" in item:
            cn = len(item)
            nil = len(m) + 1  # 已pop一个元素,原长度为当前长度+1
            
            if cn > 22:
                countertls += 1
                # 每处理1000条打印一次,降低控制台负载
                if countertls % 1000 == 0:
                    print(f"\x1B[1mStringChar22+ Removed\x1B[0m")
                    print(f"CN Value = {cn}")
                    print(f"NuminList Value = {nil}\n")
            else:
                userList.append(item)
                counterpus += 1
                if counterpus % 1000 == 0:
                    print(f"\x1B[1mPotentialUsername Added\x1B[0m")
                    print(f"CN Value = {cn}")
                    print(f"NuminList Value = {nil}\n")
    
    print("Printing...")
    time.sleep(2)
    # 写入文件时将列表转为字符串
    with open("tempy.txt", "w", encoding='utf8') as tmp:
        tmp.write('\n'.join(userList))
    
    print(f"\nCharTLS Removed: {countertls}")
    print(f"CounterPUS Added: {counterpus}")
    print("\n   Process Completed  ")

# 调用时替换为你的目标文件路径
# spamp2("your_log_file.txt")

关键修复点说明

  1. 安全遍历:用m.pop(0)从列表头部取元素,避免for循环中修改列表导致的迭代异常。
  2. 循环条件优化:直接用while m判断列表是否为空,无需额外变量跟踪长度。
  3. 正则替换生效:用re.sub实现正则匹配,正确替换表情格式内容。
  4. 语法错误修正:修复导入语句,将文件路径作为参数传入函数,避免未定义变量问题。
  5. 文件写入修复:用'\n'.join(userList)将列表转为字符串后写入。
  6. 性能优化:减少打印频率,过滤空字符串,降低程序不必要的负载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 11:05:42