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")
关键修复点说明
- 安全遍历:用
m.pop(0)从列表头部取元素,避免for循环中修改列表导致的迭代异常。 - 循环条件优化:直接用
while m判断列表是否为空,无需额外变量跟踪长度。 - 正则替换生效:用
re.sub实现正则匹配,正确替换表情格式内容。 - 语法错误修正:修复导入语句,将文件路径作为参数传入函数,避免未定义变量问题。
- 文件写入修复:用
'\n'.join(userList)将列表转为字符串后写入。 - 性能优化:减少打印频率,过滤空字符串,降低程序不必要的负载。
内容的提问来源于stack exchange,提问作者DagerTCD
相关产品推荐
相关产品推荐

