опубликовать различные твиты с соответствующим изображением с твипи - PullRequest
0 голосов
/ 22 января 2019

Я не знаю, как публиковать различные твиты с изображением.

У меня есть текст с твитами (3) Я хочу опубликовать и 3 изображения для публикации:

  • твит 1 с изображением 1
  • твит 2 с изображением 2
  • твит 3 с изображением 3

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

my_file = open('tweets.txt','r')

file_lines = my_file.readlines()

my_file.close

filenames = ['IMG/img1.jpg','IMG/img2.jpg','IMG/img3.png']

for line in file_lines:
    for filename in filenames:
        imagePath = filename
        api.update_with_media(imagePath,line)
        filenames = filenames[1:]
        nap = randint(1,60)
        time.sleep(nap)

1 Ответ

0 голосов
/ 22 января 2019

Я упростил ваш код, чтобы вы могли видеть, что происходит:

tweets = ["tweet 1", "tweet 2", "tweet 3"]
images = ["image 1", "image 2", "image 3"]

for t in tweets:
    for i in images:
        print(t + " with " + i)
        images = images[1:]

Вывод:

tweet 1 with image 1
tweet 1 with image 2
tweet 1 with image 3

Что происходитна?

у вас есть две for петли, одна внутри другой, говоря:

Для каждого твита, для каждого изображения, покажите мне твит + изображение, затемудалить первое изображение в списке

Итак, что ваша программа делает:

# first iteration of 'tweets' list
tweet = "tweet 1"
# first iteration of 'images' list
image = "image 1"
print tweet + image # ("tweet 1" and "image 1")
# remove first image from 'images' ("images 1")

# second iteration of 'images' list (notice that tweet is still "tweet 1")
image = "image 2"
print tweet + image # ("tweet 1" and "image 2")
# remove first image from 'images' ("images 2")


# third iteration of 'images' list (notice that tweet is still "tweet 1")
image = "image 3"
print tweet + image # ("tweet 1" and "image 2")
# remove first image from 'images' ("images 3")


# second iteration of 'tweets' list
tweet = "tweet 2"
# 'images' list is now empty, so nothing will be iterated (nor printed)

# third iteration of 'tweets' list
tweet = "tweet 3"
# 'images' list is now empty, so nothing will be iterated (nor printed)

Так что же делать?

Предполагаясписки имеют одинаковую длину n, вы можете выбрать элементы по индексу, от 0 до n-1:

tweets = ["tweet 1", "tweet 2", "tweet 3"]
images = ["image 1", "image 2", "image 3"]

for n in range(len(images)):
    print(tweets[n] + " with " + images[n])

вывод:

tweet 1 with image 1
tweet 2 with image 2
tweet 3 with image 3

Если выхочу пойти еще дальше, в Python есть встроенный zips вместе 2 списка: функция zip ()

tweets = ["tweet 1", "tweet 2", "tweet 3"]
images = ["image 1", "image 2", "image 3"]

my_tweets = zip(tweets, images)

for tweet, image in my_tweets:
    print(tweet + " with " + image)

Есть много других решений, но эта 2 должна работать нормально для вас.Используйте первое, если вам больше не нужны эти твиты в коде;если вы собираетесь использовать их снова, перейдите с zip.

Оставьте только последний шаг, чтобы фактически опубликовать твиты.Удачи!

...