2025年又是1年1024

群里清哥发了各位程序猿节日快乐,我都没有反应出来这个梗。不是优快云提醒,都不知道又一个1024悄然来临了。看来真的是老了,脑子不够用了。

这个时候我本该下班去妹子老家的,自然是有事,所以能早点下班。今天下午BOSS还群里通知从这周开始单休。项目紧张啊。

回想这一年过的真的是太快了,上半年在拼一个mmo类型的弹幕游戏,上线后数值崩了,导致收益很快直线下降。很快又开了新项目,全力搞新项目ing。

其实我个人更倾向于老项目优化后以版本Ⅱ的形式上的,成本什么的也可控。项目数值问题确实很大,其实是可以改出来的。

做游戏是真的累,现在游戏红利期也过了,忙忙碌碌一年时间过的太快了。有时候也会想这种人生是否是自己想要的。但是巧妇难为无米之炊,身价亿万的话,也许我们可以活的更轻松一些。

这几天一直阴雨连绵的,温度也骤降。秋冬一夜转换,阴雨连绵的。这个城市的冬天一直都是这样,没有阳光或者说很少有阳光。

就写到这,希望新项目顺利,在12月能上线公测。那么今年也算是2个项目打底了。虽然累但是也算是有不错的产出了。

PS:前几天体检机构体检,有几个指标有点问题,还要抽空去正规大医院查一下。身体才是更重要的。

另外希望自己身体无恙,人间值得,加油!

感谢你坚持反馈:“**替换结果依旧相同为20251月3日**”。 这非常关键! 我们现在可以 **100% 确定问题根源**: > ❌ 所有 `YYYYMMDD` 都被替换成 **同一个星期五:20251月3日**, > ✅ 说明: > > - 脚本能找到“星期五” > - 替换逻辑在运行 > - 但 **计数器没有递增** > - 或者 `fridays` 列表里 **全是同一个日期** --- ## 🔍 最终诊断结论(基于“全是2025-01-03”) ### 🎯 根本原因极可能是以下之一: | 原因 | 描述 | 如何验证 | |------|------|---------| | ✅ 1. `fridays` 列表生成错误 | 你以为生成了52个星期五,其实只生成了一个 | 打印 `fridays` 内容 | | ✅ 2. `counter['count'] += 1` 没执行 | 每次都用 `index = 0` 取第一个 | 加 `print(counter)` | | ✅ 3. `global_counter` 是局部变量 | 每次处理文件都重置为 0 | 检查定义位置 | | ⚠️ 4. `repl()` 函数未被多次调用 | 实际只匹配到一个日期 | 打印“发现匹配” | 我们来 **逐项排查**。 --- ## ✅ 排查步骤 1:确认 `fridays` 是否真的包含多个不同星期五 请在你的代码中加入这一段并运行: ```python from datetime import date, timedelta def get_fridays(year): d = date(year, 1, 1) while d.weekday() != 4: # Friday=4 d += timedelta(days=1) fridays = [] while d.year == year: fridays.append(d) d += timedelta(weeks=1) return fridays # 👇 立即测试输出 fridays = get_fridays(2025) print("📅 生成的星期五列表:") for i, day in enumerate(fridays[:10]): # 只看前10个 print(f" {i+1}. {day}") if len(fridays) < 50: print(f"⚠️ 总共只有 {len(fridays)} 个星期五?应该有52个") ``` ### ❌ 如果输出是这样的: ``` 1. 2025-01-03 2. 2025-01-03 3. 2025-01-03 ... ``` → 说明你在循环中 **没有创建新对象**,而是不断 append 同一个 `d` ### 🛠️ 错误写法(经典 bug): ```python while ...: fridays.append(d) # ❌ 引用的是同一个对象! d += timedelta(weeks=1) ``` ### ✅ 正确写法: ```python while ...: fridays.append(d) # ✅ 当前状态 d = d + timedelta(weeks=1) # ✅ 创建新对象(不可变类型推荐) ``` 或者使用: ```python fridays.append(d.replace()) # 不需要,date 是不可变的,但逻辑清晰更重要 ``` 👉 `date` 类型是不可变的,所以通常不会出错。但如果你用了可变对象(如 list),就会有问题。 --- ## ✅ 排查步骤 2:检查 `counter['count'] += 1` 是否被执行 在你的 `replacement` 函数中加入: ```python def replacement(match): print(f"[DEBUG] 进入 repl 函数,当前 counter: {counter['count']}") idx = counter['count'] friday = fridays[idx % len(fridays)] result = f"{friday.year}{friday.month}月{friday.day}日" counter['count'] += 1 # ✅ 必须在这里! print(f"[DEBUG] 替换完成 → {match.group()} → {result},counter 变为 {counter['count']}") return result ``` ### ❌ 如果你看到: ``` [DEBUG] 进入 repl 函数,当前 counter: 0 [DEBUG] 替换完成 → 20250405 → 20251月3日,counter 变为 1 [DEBUG] 进入 repl 函数,当前 counter: 0 ← 又变成 0 了! [DEBUG] 替换完成 → 20250412 → 20251月3日,counter 变为 1 ``` → 说明:`counter` 不是共享的!每个文件都新建了一个! --- ## ✅ 排查步骤 3:确认 `global_counter` 是全局唯一的 ### ❌ 错误写法(致命): ```python def process_file(file): counter = {'count': 0} # ❌ 每个文件都从 0 开始! ... ``` ### ✅ 正确写法: ```python global_counter = {'count': 0} # ✅ 只定义一次 for file in files: process_file(file, fridays, global_counter) # 传引用 ``` --- ## ✅ 排查步骤 4:确认正则是否真的匹配多个位置 加入调试打印: ```python text_before = para.text matches = pattern.findall(para.text) if matches: print(f"🔍 段落中发现 {len(matches)} 个匹配: {matches}") para.text = pattern.sub(replacement, para.text) ``` ### ❌ 如果输出: ``` 段落中发现 3 个匹配: ['20250405', '20250412', '20250419'] ``` 但最终都变成“1月3日” → 说明 `counter` 没递增 --- ## ✅ 终极修复代码(保证轮换成功) ```python import os import re from datetime import date, timedelta from docx import Document # ✅ 1. 正确生成所有星期五 def get_fridays(year): d = date(year, 1, 1) # 找到第一个星期五 while d.weekday() != 4: d += timedelta(days=1) fridays = [] while d.year == year: fridays.append(d) # ✅ d 是新的 date 对象 d = d + timedelta(weeks=1) # ✅ 创建新实例 return fridays # ✅ 2. 替换函数(带调试) def replace_dates_in_doc(doc_path, fridays, counter): print(f"\n📄 处理文件: {os.path.basename(doc_path)}") try: doc = Document(doc_path) except Exception as e: print(f"❌ 打开失败: {e}") return False pattern = re.compile(r'(?<!\d)\d{8}(?!\d)') total_replaced = 0 def repl(match): nonlocal total_replaced matched = match.group() print(f" 📌 匹配到: {matched}") # 解析月日(简单校验) y, m, d = matched[:4], matched[4:6], matched[6:] try: int(y), int(m), int(d) except ValueError: return matched # ✅ 获取当前索引并递增 current_index = counter['count'] friday = fridays[current_index % len(fridays)] new_text = f"{friday.year}{friday.month}月{friday.day}日" print(f" 🔁 替换: {matched} → {new_text} (第 {current_index + 1} 个)") counter['count'] += 1 # ✅ 关键:必须在这儿! total_replaced += 1 return new_text # 应用到段落 for para in doc.paragraphs: if pattern.search(para.text): para.text = pattern.sub(repl, para.text) # 应用到表格 for table in doc.tables: for row in table.rows: for cell in row.cells: if pattern.search(cell.text): cell.text = pattern.sub(repl, cell.text) # 保存 try: doc.save(doc_path) print(f"✅ 已保存,共替换 {total_replaced} 处") return True except Exception as e: print(f"❌ 保存失败: {e}") return False # 主程序 if __name__ == "__main__": YEAR = 2025 FOLDER = "周检文件夹" # ✅ 全局唯一计数器(只初始化一次!) global_counter = {'count': 0} fridays = get_fridays(YEAR) print(f"📅 {YEAR} 共有 {len(fridays)} 个星期五") for i, day in enumerate(fridays[:5]): print(f" {i+1}. {day}") files = [ os.path.join(FOLDER, f) for f in os.listdir(FOLDER) if f.endswith('.docx') and not f.startswith('~$') ] for file in files: replace_dates_in_doc(file, fridays, global_counter) print(f"\n🔚 总共处理了 {global_counter['count']} 个日期") ``` --- ## ✅ 最后建议:手动测试 `fridays` 内容 直接在 Python 中运行: ```python from datetime import date, timedelta d = date(2025, 1, 1) while d.weekday() != 4: d += timedelta(days=1) fridays = [] for _ in range(5): fridays.append(d) d = d + timedelta(weeks=1) print(fridays) # 输出应为: # [datetime.date(2025, 1, 3), datetime.date(2025, 1, 10), ...] ``` 如果不是 → 说明环境有问题(几乎不可能) --- ## ✅ 结论 你看到“全是20251月3日”的最可能原因是: > 💥 `fridays` 列表中所有的元素都是同一个 `date` 对象(或等值), > 或者 `counter['count'] += 1` **根本没有执行**。 只要加上我上面的 `print` 调试信息,就能立刻定位! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iningwei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值