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

Python实现定时检查TransactionFile.txt是否新增交易数据的问题

解决定期检查交易文件最后一行的重复打印问题

我来帮你搞定这个问题!你的代码里有几个关键逻辑错误导致了重复打印旧交易的情况,咱们一步步修正:

现有代码的核心问题

  • 无效的判断条件:if fileLast == fileLast永远为真,这会让代码每次都认为有新交易,不管文件有没有更新
  • 文件操作错误:file.close没有加括号,相当于没调用关闭文件的方法;而且重复打开了两次文件
  • 状态没有持久化:fileSecLast初始化后从未更新,无法用来对比上一次的交易记录
  • 循环结构混乱:while True加上threading.Timer的定时触发,导致逻辑嵌套混乱,多余的break也打断了正常流程

修改后的代码实现

我们需要用一个持久化的变量来记录上一次读取的最后一行,结合threading.Timer实现每10秒检查一次的逻辑:

import threading

# 初始化变量,保存上一次读取的最后一行
last_transaction = None

def transactionCheck():
    global last_transaction
    try:
        # 打开文件并读取最后一行
        with open('TransactionFile.txt', 'r') as file:
            # 读取所有行,处理空文件的情况
            lines = file.readlines()
            if not lines:
                current_last = None
            else:
                current_last = lines[-1].strip()  # 去掉换行符避免对比问题
            
            # 对比当前最后一行和上一次的记录
            if current_last and current_last != last_transaction:
                print('New transaction data found.')
                print(current_last)
                # 调用你的calcNonce函数
                callfunctionNonce = calcNonce()
                # 更新记录的最后一行
                last_transaction = current_last
            elif current_last == last_transaction:
                print('No new transaction data found.')
            else:
                # 文件为空的情况
                print('Transaction file is empty.')
    except FileNotFoundError:
        print('TransactionFile.txt could not be found.')
    finally:
        # 10秒后再次触发检查
        threading.Timer(10.0, transactionCheck).start()

# 启动定时检查
transactionCheck()

# 假设你的calcNonce函数实现如下(根据实际情况调整)
def calcNonce():
    # 这里写你的nonce计算逻辑
    pass

代码说明

  1. 持久化状态:用全局变量last_transaction保存上一次读取的最后一行,每次检查时对比当前行
  2. 安全的文件操作:使用with语句自动管理文件的打开和关闭,避免资源泄漏
  3. 空文件处理:判断文件是否为空,避免读取lines[-1]时抛出索引错误
  4. 正确的定时触发:在finally块中启动下一次Timer,确保即使出现异常也能继续定时检查
  5. 换行符处理:用strip()去掉最后一行的换行符,避免因为换行符导致的对比不相等问题

这样修改后,就能实现你期望的输出:当有新交易时打印新数据,没有新交易时输出“No new transaction data found.”,文件不存在时输出对应的错误信息。

内容的提问来源于stack exchange,提问作者MacGenius

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:40:31