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
代码说明
- 持久化状态:用全局变量
last_transaction保存上一次读取的最后一行,每次检查时对比当前行 - 安全的文件操作:使用
with语句自动管理文件的打开和关闭,避免资源泄漏 - 空文件处理:判断文件是否为空,避免读取
lines[-1]时抛出索引错误 - 正确的定时触发:在
finally块中启动下一次Timer,确保即使出现异常也能继续定时检查 - 换行符处理:用
strip()去掉最后一行的换行符,避免因为换行符导致的对比不相等问题
这样修改后,就能实现你期望的输出:当有新交易时打印新数据,没有新交易时输出“No new transaction data found.”,文件不存在时输出对应的错误信息。
内容的提问来源于stack exchange,提问作者MacGenius
相关产品推荐
相关产品推荐

