Избегайте повторяющихся строк при чтении из текстового файла - PullRequest
0 голосов
/ 14 января 2020

Я создал бота в Твиттере для публикации описательных прилагательных из списка 3000. У меня возникли проблемы, когда он взломал sh с ошибкой Tweepy, сообщающей, что статус является дубликатом.

Мне кажется, что лучшим решением было бы удалить строку из текстового файла после печати. Каков наилучший способ реализовать это?

Вот основная часть кода, который я написал до сих пор:

import random
import tweepy
import time
from auth import consumer_secret, consumer_key, access_token_secret, access_token

api = tweepy.API(auth)

starttime = time.time()
while True:
    file = open('words.txt', 'r')
    random_word = random.choice(file.readlines())
    tweet = ('The %s tree.' % random_word.strip())
    api.update_status(status=tweet)
    print('Tweeted: %s' % tweet)
    time.sleep(1800.0 - ((time.time() - starttime) % 1800.0))

После внесения некоторых изменений по предложению sshashank124, это обновленный код:

from random import shuffle
import tweepy
import time
from auth import consumer_secret, consumer_key, access_token_secret, access_token

 api = tweepy.API(auth)

    starttime = time.time()
    with open('words.txt', 'r') as f:
        lines = [line.strip() for line in f.readlines()]

    shuffle(lines)

    for line in lines:
        tweet = ('The {} tree.'.format(line))
        api.update_status(status=tweet)
        print('Tweeted: ', tweet)
        time.sleep(1800.0 - ((time.time() - starttime) % 1800.0))


if __name__ == '__main__':
    main()

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

Ответы [ 2 ]

1 голос
/ 14 января 2020

В настоящее время вы читаете все время во время каждой итерации l oop. Лучшим вариантом будет прочитать один раз, перемешать строки и обработать их:

from random import shuffle

with open('words.txt', 'r') as f:
    lines = [line.strip() for line in f.readlines()]

shuffle(lines)

for line in lines:
    tweet = 'The {} tree.'.format(line)
    api.update_status(status=tweet)
    print('Tweeted: ', tweet)
0 голосов
/ 16 января 2020

Я обнаружил, что проблема не исчезла даже после редактирования кода, поэтому я нашел решение, удалив случайное расположение из программы и взяв вместо этого случайный текстовый файл. Таким образом, программа может читать строки по порядку, а слова по-прежнему будут отображаться в случайном порядке, избегая дублирования и сообщений об ошибках из твиттера.

...