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

如何检测文件行中是否存在指定单词 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:48:33