Загрузка файлов XML с URL-адреса веб-служб в python - PullRequest
0 голосов
/ 31 октября 2018

Пожалуйста, поправьте меня, если я ошибаюсь, поскольку я новичок в Python.

У меня есть URL-адрес веб-службы, который содержит файл XML:

http://abc.tch.xyz.edu:000/patientlabtests/id/1345

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

Можно загружать по одному файлу за раз, но у меня есть 1000 значений в списке, и я пытался написать функцию с циклом for, и я застрял.

x = [ 1345, 7890, 4729]
for i in x :
     url = http://abc.tch.xyz.edu:000/patientlabresults/id/{}.format(i)
     response = requests.get(url2)

      ****** Missing part of the code ********

        with open('.xml', 'wb') as file:
        file.write(response.content)
        file.close()

Файлы, загруженные с URL-адреса, должны выглядеть как

"1345patientlabresults.xml"
"7890patientlabresults.xml"
"4729patientlabresults.xml"

Я знаю, что часть кода отсутствует, и я не могу заполнить эту отсутствующую часть. Буду очень признателен, если кто-нибудь сможет мне помочь с этим.

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Доступ к URL-адресу вашего веб-сервиса, похоже, не работает. Проверьте это.

import requests


x = [ 1345, 7890, 4729]
for i in x :
    url2 = "http://abc.tch.xyz.edu:000/patientlabresults/id/"
    response = requests.get(url2+str(i)) # i must be converted to a string

Примечание. Когда вы используете «с» для открытия файла, у вас нет необходимости закрывать файл, поскольку он будет закрыт автоматически.

with open(filename, mode) as file:
    file.write(data)

Поскольку указанный вами URL не работает, я собираюсь использовать другой URL. И я надеюсь, что вы поняли и как записать в файл, используя пользовательское имя

import requests

categories = ['fruit', 'car', 'dog']

for category in categories :
    url = "https://icanhazdadjoke.com/search?term="
    response = requests.get(url + category)
    file_name = category + "_JOKES_2018" #Files will be saved as fruit_JOKES_2018

    r = requests.get(url + category)
    data = r.status_code #Storing the status code in 'data' variable

    with open(file_name+".txt", 'w+') as f:
        f.write(str(data)) # Writing the status code of each url in the file

После запуска этого кода коды состояния будут записаны в каждом из файлов. И файл также будет называться следующим образом:

  • car_JOKES_2018.txt
  • dog_JOKES_2018.txt
  • fruit_JOKES_2018.txt

Надеюсь, это поможет вам понять, как называть файлы и записывать их в файлы.

0 голосов
/ 31 октября 2018

Я думаю, вы просто хотите создать путь, используя str.format, поскольку вы (почти) для URL. может быть что-то вроде следующего

import os.path
x = [ 1345, 7890, 4729]
for i in x:
     path = '1345patientlabresults.xml'.format(i)
     # ignore this file if we've already got it
     if os.path.exists(path):
       continue

     # try and get the file, throwing an exception on failure
     url = 'http://abc.tch.xyz.edu:000/patientlabresults/id/{}'.format(i)
     res = requests.get(url)
     res.raise_for_status()

     # write the successful file out
     with open(path, 'w') as fd:
       fd.write(res.content)

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

...