@DoubleTap

Цикл на повторение действия после прохождения каждой строки (xlrd)?

Помогите, пожалуйста, разобраться. Работаю с xls файлом, в котором построчно содержатся данные, которые необходимо внести в виде xml с последующей отправкой post запроса на api. Сам не программирую - совсем чайник, поэтому пока интуитивно пытаюсь разобраться и параллельно учусь в написании кода прямо на практике.
Мне необходимо создать цикл таким образом, чтобы после прохождения строки выполнялась процедура записи в xml и содержимое xml отправлял post на сервер, а затем переходил на следующую строку и выполнял эту же процедуру.

Пользуюсь библиотекой xlrd, накидал парочку строк, но к сожалению, по окончанию моего цикла, в xml записывается данные из последней строки.
Можете подсказать, пожалуйста, какие варианты можно еще придумать?
Спасибо!

import requests
import xlrd

book = xlrd.open_workbook(r"C:\Users\Admin\Documents\Pytest\data.xls")
sh = book.sheet_by_index(0)

for i in range(1,sh.nrows):
    print(f'# Итерация номер {i} из {sh.nrows}.')
    oldname  = sh.cell_value(rowx=i,colx=0)
    citype = sh.cell_value(rowx=i,colx=1)
    newname = sh.cell_value(rowx=i,colx=2)

with open('test.xml',"w",encoding="utf-8") as f:

url = "http://..." + содержимое xml
  • Вопрос задан
  • 106 просмотров
Пригласить эксперта
Ответы на вопрос 1
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Что-то примерно такое должно быть:
Такое...
import requests
import xlrd
from pathlib import Path


def my_xml(citype, oldname, newname):
    return f'''<?xml version='1.0' encoding='UTF-8'?>
    <API version='1.0' >
        <citype>
            <name>{citype}</name>
                <criterias>
                    <criteria>
                        <parameter>
                            <name compOperator="IS">CI Name</name>
                            <value>{oldname}</value>
                        </parameter>
                    </criteria>
                </criterias>
            <newvalue>
                <record>
                    <parameter>
                        <name>CI Name</name>
                        <value>{newname}</value>
                    </parameter>
                </record>
            </newvalue>
        </citype>
    </API>'''


if __name__ == '__main__':
    datafilename = Path('data.xls')
    datafilepath = Path.home() / Path('Documents/Pytest/')
    datafile = datafilepath / datafilename
    book = xlrd.open_workbook(datafile)
    sh = book.sheet_by_index(0)
    url_prefix = "http://qwerty.com/api/ci?OPERATION_NAME=update&INPUT_DATA="
    for i in range(0, sh.nrows):
        print(f'## Итерация номер {i} из {sh.nrows}.')
        oldname = str(sh.cell_value(rowx=i, colx=0))
        citype = str(sh.cell_value(rowx=i, colx=1))
        newname = str(sh.cell_value(rowx=i, colx=2))
        url = url_prefix + my_xml(oldname, citype, newname)
        requests.post(url)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы