Понимание списка Python, возвращающего только последний элемент - PullRequest
2 голосов
/ 22 марта 2019

Я пытаюсь опубликовать несколько файлов с помощью запросов post.

Формат, который указан здесь :

>>> url = 'http://httpbin.org/post'
>>> multiple_files = [('images', ('foo.png', open('foo.png', 'rb'), 'image/png')),
                      ('images', ('bar.png', open('bar.png', 'rb'), 'image/png'))]
>>> r = requests.post(url, files=multiple_files)
>>> r.text

Так что я пытаюсь сделать это с пониманием списка. Но загружается только последнее изображение. У меня такое ощущение, что понимание переопределяет изображения, поскольку все изображения имеют одно и то же имя visuals . Но я потребовал, чтобы у всех них было имя visuals .

images=[list of image URLS]
files=[('visuals',(str(index)+'.jpg',requests.get(image).content,'image/jpeg')) for index,image in enumerate(images)]
requests.post(script.php,files=files)

Например, если имеется 20 изображений, на мой script.php .

отправляется только 20.jpg.

Ответ на ответ (не работает):

  images=response.xpath(root+'/photos//url/text()').extract()
  visuals=[(str(index)+'.jpg',requests.get(image).content,'image/jpeg') for index,image in enumerate(images)]
  requests.post(triggers,data={'json':json.dumps(array)},files={'visuals':visuals})

1 Ответ

4 голосов
/ 22 марта 2019

Аргумент files для requests.post должен быть dict. Смотрите пример здесь . Поскольку вы передаете его с list объектом, он будет внутренне приведен к объекту dict. Во время приведения типа последний элемент перезапишет первый элемент с тем же значением ключа! Поскольку все элементы внутри имеют одинаковые ключевые «визуалы», в последнем объекте dict останется только последний.

На этот вопрос уже был дан ответ на странице вопроса о запросах # 737 .

В списке кортежей, предоставленных вами данным, вызывается dict (). Словари (очевидно) не допускают дублирования ключей, но в вашем списке кортежей есть дубликаты ключей, поэтому последний элемент в итерируемом принимает значение для этого ключа ... поэтому я предполагаю, что это предполагаемое поведение.

...