为何if条件为真却仅执行else分支?俯卧撑日志代码疑问
问题分析:俯卧撑日志程序日期判断输出False的原因
问题场景
我正在开发一个俯卧撑日志程序,需要判断其生成的文本文件中是否包含当前日期,以此决定是在计数列表中追加内容,还是新增一行写入新日期。
测试代码如下:
from datetime import date with open("Push-Ups-Log.txt", "a+") as Counter: AllLogs = Counter.read() if str(date.today()) in AllLogs: print("True") else: print("False")
当前文本文件内容:
1. 2022-07-21
Python运行输出:
False
原因分析
核心问题出在**a+模式打开文件时的指针位置**:
- 使用
a+模式打开文件时,文件指针默认指向文件末尾。此时直接调用read()方法,会从末尾开始读取内容,自然读不到任何数据,AllLogs会是空字符串。 - 空字符串中不可能包含目标日期,所以无论文件实际内容是什么,都会输出
False。
额外说明:如果你的测试场景中当前日期确实是2022-07-21,那修正指针位置后就能得到正确结果;如果当前日期不是这个值,输出False属于正常逻辑。
解决方案
在读取文件内容前,调用seek(0)将文件指针移到文件开头:
from datetime import date with open("Push-Ups-Log.txt", "a+") as Counter: Counter.seek(0) # 移动指针到文件开头 AllLogs = Counter.read() if str(date.today()) in AllLogs: print("True") else: print("False")
内容的提问来源于stack exchange,提问作者XboxOneSogie720
相关产品推荐
相关产品推荐

