如果存在一个值,如何将文本文件的所有行读取到 return,如果不存在则写入该值?

How to read all lines of text file to return if a value is present and then write this value if not present?

我对使用 Python 读取我的 txt 文件然后附加一个值有点困惑。

我要实现的是调用 API,检索最新对象的 ID,并检查此 ID 是否已在先前检索和发布的对象列表中。

我用 5 个随机 ID 预填充了我的输出文件,看看它是否有效(请参阅输出文件前五行)。

我调用的结果是它对输出文件中的每一行进行检查,然后打印 id 值的五倍(来自新的 API 调用)。然后对于第二次调用,它在前五行再次打印了 5 次,对于接下来的五行,它终于看到 id 存在,因为这次是相同的,但也打印了五次 I found nothing interesting :(

我想要的只是让 1 个操作一次读取所有行,并检查 present/not 存在,然后 write/not 写入。我正在用 Py3 编写,但最终将不得不移植到 Py2。

如果您认为我总体上确实做错了,请告诉我,我是新手。

这是片段:

with open('Output.txt', 'r') as f:
    for line in f.readline():
        if idValue in line:
            print("I found nothing interesting :(")
        else:
            send_message_to_slack(string)
            print("bingo, message sent!")
            # Saving the value retrieved to a text file for the next call
            with open("Output.txt", "a") as text_file:
                #print("{}".format(idValue), file=text_file)
                text_file.write("\n"+idValue)
time.sleep(100)

我的日志:

Checking id value
Calling API
decode data
retrieving_id
bingo, message sent!
bingo, message sent!
bingo, message sent!
bingo, message sent!
bingo, message sent!
Checking id value
Calling API
decode data
retrieving_id
bingo, message sent!
bingo, message sent!
bingo, message sent!
bingo, message sent!
bingo, message sent!
I found nothing interesting :(
I found nothing interesting :(
I found nothing interesting :(
I found nothing interesting :(
I found nothing interesting :(

输出文件:

5468
64654654
6546
35463
7575337
308381357
308381357
308381357
308381357
308381357
308381357
308381357
308381357
308381357
308381357

你真的很接近!要在一个操作中完成所有值检查,您应该使用中间 set 来读取和存储所有当前值,然后检查 set 是否存在新的 [=13] =]:

with open('Output.txt', 'r') as f:
    currentValues = set()

    for line in f.readline():
        currentValues.add(int(line))

    if idValue in currentValues:
        print("I found nothing interesting :(")
    else:
        send_message_to_slack(string)
        print("bingo, message sent!")

        # Saving the value retrieved to a text file for the next call
        with open("Output.txt", "a") as text_file:
            #print("{}".format(idValue), file=text_file)
            text_file.write("\n"+idValue)

time.sleep(100)

希望对您有所帮助!