Как прочитать все строки текстового файла для возврата, если значение присутствует, а затем записать это значение, если его нет? - PullRequest
0 голосов
/ 30 мая 2018

Я немного запутался, читая мой текстовый файл с помощью Python, а затем добавляя к нему значение.

Я пытаюсь добиться вызова API, получения идентификатора последнего объекта,и проверьте, есть ли этот идентификатор в списке ранее извлеченных и опубликованных объектов.

Я предварительно заполнил свой выходной файл 5 случайными идентификаторами, чтобы посмотреть, работает ли он (см. выходной файл для пяти строк).

Результатом моего вызова было то, что для каждой строки в моем выходном файле была выполнена проверка, а затем напечатано пять раз значение идентификатора (из нового вызова API).Затем для второго вызова он напечатал его снова 5 раз для первых пяти строк, а для следующих пяти он наконец увидел, что id присутствовал, поскольку на этот раз он был таким же, но также напечатал I found nothing interesting :( пять раз.

Мне бы хотелось, чтобы 1 операция считывала все строки сразу, и делала проверку присутствующей / не присутствующей, а затем записывала / не записывала.Я пишу на 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

1 Ответ

0 голосов
/ 01 июня 2018

Ты действительно близко!Чтобы выполнить всю проверку значений в одной операции, вы должны использовать промежуточный set, чтобы прочитать и сохранить все текущие значения, а затем проверить, что set для существования вашего нового idValue:

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)

Надеюсь, это поможет!

...