Python读取文本文件检查ID并实现单次写入的问题求助
解决Python读写txt文件时重复写入ID的问题
嘿,我来帮你捋捋这个问题~你的代码现在出现重复写入ID的情况,核心是两个逻辑错误:
- 你用了
for line in f.readline(),这行代码只会读取文件的第一行,然后遍历这一行里的每个字符(而不是文件的每一行),这就是为什么第一次调用后ID被写了5次——刚好对应初始文件里的5个测试ID相关的循环次数。 - 你把写入文件的代码放在了循环内部,导致每一次循环都执行一次写入操作,自然就重复写入同一个ID了。
正确的思路应该是:一次性读取所有已存储的ID,先完成一次存在性检查,再决定是否发送Slack消息和写入新ID,这样就不会重复操作了。而且用集合来存储已有的ID,查找效率会比列表高很多哦。
下面是兼容Python 2和Python 3的修正代码:
import time # 兼容Python2的print函数,和Python3保持一致 from __future__ import print_function def send_message_to_slack(msg): # 这里保留你原来的Slack消息发送逻辑即可 pass # 替换成你实际调用API获取idValue的代码 idValue = "308381357" # 第一步:读取文件中所有已存在的ID,存入集合 existing_ids = set() try: with open('Output.txt', 'r') as f: for line in f: # 去掉每行的换行符和首尾空白,避免空行干扰 line_id = line.strip() if line_id: existing_ids.add(line_id) except IOError: # 处理文件不存在的情况(第一次运行时) existing_ids = set() # 第二步:仅做一次存在性检查,决定后续操作 if idValue not in existing_ids: send_message_to_slack("你的Slack消息内容") print("bingo, message sent!") # 追加写入新ID到文件 with open("Output.txt", "a") as text_file: text_file.write(idValue + "\n") else: print("I found nothing interesting :(") time.sleep(100)
代码逻辑说明:
- 用
try-except处理文件不存在的场景,避免第一次运行时报错。 - 读取文件时逐行处理,把每个有效的ID加入集合,集合的
in操作是高效的O(1)查找,比遍历列表更省心。 - 只做一次存在性判断:如果新ID不在集合里,就发送消息并写入文件;如果已存在,就打印提示。这样就不会出现重复写入的问题了。
另外建议你把初始测试ID改成每行一个的格式,比如:
5468 64654654 6546 35463 7575337
这样能避免因为空格分隔导致的ID识别错误(比如如果ID本身包含空格的话就会出问题)。
现在修正后,每次调用API只会检查一次ID是否存在,写入一次(当ID不存在时),完全符合你的需求啦~
内容的提问来源于stack exchange,提问作者Pedro MS




