Читайте по одной строке за раз, используя csv.dictreader и lxml.builder, чтобы отправить запрос в формате XML для каждой строки один раз и повторить - PullRequest
0 голосов
/ 06 марта 2019
def csv_to_xml_request_club():
    with open('E:\\path01\\path02\\New_Dummy04.csv') as csvfile:
        results = E.Lam(*(
            E.INProfileRequest(
                E.Identification(
                    E.XMLUser(row['XMLUser']),
                    E.XMLPassword(row['XMLPassword']),
                ),
                E.Application(
                    E.FTReferenceNumber(row['FTReferenceNumber']),
                    E.CustomerReferenceID(row['CustomerReferenceID']),
                    E.EnquiryReason(row['EnquiryReason']),
                    E.FinancePurpose(row['FinancePurpose']),
                    E.AmountFinanced(row['AmountFinanced']),
                    E.DurationOfAgreement(row['DurationOfAgreement']),
                    E.ScoreFlag(row['ScoreFlag']),
                    E.PSVFlag(row['PSVFlag']),
                ),
           )
            for row in csv.DictReader(csvfile))
                        )

Приведенный выше метод используется для преобразования строк CSV в формат XML.

После выполнения строки сохраняются в формате xml в разных блоках в переменной результатов (дерево является встроенным типом дерева).То, что я хочу сделать, это вместо того, чтобы хранить все строки за раз в переменной результата (в виде различных блоков <INProfileRequest>), я хочу брать по одной строке за раз и генерировать xml относительно нее, а затем сниматьзапрос через запрос lib и получение ответа.Затем снова повторите процесс для остальных строк одну за другой.

Переменная результатов после преобразования tostring выдает XML, как указано ниже:

#Row 1
    <INProfileRequest>
        <Identification>
          <XMLUser>XXXXXX</XMLUser>
          <XMLPassword>XXXXXX</XMLPassword>
        </Identification>
        <Application>
          <FTReferenceNumber>XX</FTReferenceNumber>
          <CustomerReferenceID>XXXXXXXX</CustomerReferenceID>
          <EnquiryReason>XXX</EnquiryReason>
          <FinancePurpose>XXXX</FinancePurpose>
          <AmountFinanced>XXXXX</AmountFinanced>
          <DurationOfAgreement>XXXX</DurationOfAgreement>
          <ScoreFlag>X</ScoreFlag>
          <PSVFlag></PSVFlag>
        </Application>
    </INProfileRequest>
#Row 2


    <INProfileRequest>
        <Identification>
          <XMLUser>XXXXXX</XMLUser>
          <XMLPassword>XXXXXX</XMLPassword>
        </Identification>
        <Application>
          <FTReferenceNumber>XX</FTReferenceNumber>
          <CustomerReferenceID>XXXXXXXX</CustomerReferenceID>
          <EnquiryReason>XXX</EnquiryReason>
          <FinancePurpose>XXXX</FinancePurpose>
          <AmountFinanced>XXXXX</AmountFinanced>
          <DurationOfAgreement>XXXX</DurationOfAgreement>
          <ScoreFlag>X</ScoreFlag>
          <PSVFlag></PSVFlag>
        </Application>
    </INProfileRequest>

В приведенной выше строке есть все«<<code>INprofileRequest>» блоки для всех соответствующих строк в csv.Я хочу взять по одному блоку за раз, то есть сначала прочитать по одной строке за раз и отправить запрос >> вернуться в csv >> рассмотреть другую строку >> запросить снова >> повторить. Надеюсь, я дал понять.Спасибо

...