如何检测文件行中是否存在指定单词 Python代码问题求解
问题排查与修复方案
你的代码存在4个核心问题导致匹配逻辑不生效:
- 条件判断语法错误:
if search_word in contents == 'LEFT \n'触发了Python的链式比较规则,实际等价于(search_word in contents) and (contents == 'LEFT \n'),只要文件内容不是完全等于LEFT \n,判断就永远返回False - 写文件后未关闭句柄:写入
LEFT \n时直接调用open后写内容,没有关闭文件,写入的内容可能滞留在内存缓冲区没有真正写到磁盘上,后续读文件时读不到刚写入的内容 - 冗余的文件读取逻辑:既然已经通过
linecache.getline拿到了指定行的内容,不需要再把整个文件读入contents做二次比对 - 回车触发分支的无效代码:按下enter时仅打开再关闭文件,没有执行任何实际的检测逻辑
修正后代码
import time import linecache from pynput.keyboard import Key from pynput.mouse import Controller mouse = Controller() # 键盘事件回调逻辑(适配原有代码框架) def on_press(key): if key == Key.left: mouse.move(901, 350, absolute=True, duration=0.02) time.sleep(0.0001) mouse.click("left") time.sleep(0.0001) # 用上下文管理器写文件,自动关闭并刷入内容 with open('Get Position.txt', 'a+', encoding='utf-8') as f: f.write('LEFT \n') if key == Key.enter: # 直接读取指定行,去除首尾空白后匹配 target_line = linecache.getline('Get Position.txt', 1).strip() if target_line == 'LEFT': print('LEFT WAS PRESSED') mouse.move(901, 350, absolute=True, duration=0.02) time.sleep(0.0001) mouse.click("left") # 清理linecache缓存,避免文件更新后读到旧内容 linecache.clearcache()
关键注意事项
- 所有文件操作优先使用
with open()上下文管理器写法,无需手动调用close,能自动处理内容刷盘、句柄释放的问题 - 文本匹配前建议对读取到的内容调用
.strip()去除首尾的换行、空格、制表符,避免因为多打了空格、换行符差异导致匹配失败 - 使用
linecache读取动态更新的文件时,读完要调用linecache.clearcache()清除缓存,否则会读到旧的缓存内容 - 不要混用成员判断和等值判断写链式表达式,很容易出现逻辑不符合预期的问题
内容的提问来源于stack exchange,提问作者coder_1234
相关产品推荐
相关产品推荐

