Я хочу знать, почему мой код делает пустые строки между информацией XML? - PullRequest
0 голосов
/ 26 января 2019

Каждая информация в XML отображается с 16 пробелами.

Я использую Python 3.7.1. Я добавил "row + = 1" в "для k в tree.iter ('bar'):" Однако во второй строке отображается только последняя информация XML.

XML-код (состояние (2) .xml):

<bar>
<F169 id="F169.777568">
    <pos>193239.0950999996 456314.7006000001</pos>
    <X_CRDNT>193239.0951</X_CRDNT>
    <Y_CRDNT>456314.7006</Y_CRDNT>
    <PNU>1138010600100330007</PNU>
    <LD_CPSG_CODE>11380</LD_CPSG_CODE>
    <LD_EMD_LI_CODE>10600</LD_EMD_LI_CODE>
    <REGSTR_SE_CODE>1</REGSTR_SE_CODE>
    <MNNM>0033</MNNM>
    <SLNO>0007</SLNO>
    <SYS_REGIST_NO>113802018000058</SYS_REGIST_NO>
    <STTUS_SE_CODE>1</STTUS_SE_CODE>
    <LAST_SEQ_NO>1</LAST_SEQ_NO>
    <BSNM_CMPNM>½ºÅ¸°øÀÎÁß°³»ç»ç¹«¼Ò</BSNM_CMPNM>
    <EMPLYM_CO>1</EMPLYM_CO>
    <FRST_REGIST_DT>2018-11-04T09:59:00</FRST_REGIST_DT>
</F169>

<F169 id="F169.777569">
    <pos>193239.0950999996 456314.7006000001</pos>
    <X_CRDNT>193239.0952</X_CRDNT>
    <Y_CRDNT>456314.7007</Y_CRDNT>
    <PNU>1138010600100330007</PNU>
    <LD_CPSG_CODE>11380</LD_CPSG_CODE>
    <LD_EMD_LI_CODE>10600</LD_EMD_LI_CODE>
    <REGSTR_SE_CODE>1</REGSTR_SE_CODE>
    <MNNM>0033</MNNM>
    <SLNO>0007</SLNO>
    <SYS_REGIST_NO>113802018000058</SYS_REGIST_NO>
    <STTUS_SE_CODE>1</STTUS_SE_CODE>
    <LAST_SEQ_NO>1</LAST_SEQ_NO>
    <BSNM_CMPNM>½ºÅ¸°øÀÎÁß°³»ç»ç¹«¼Ò</BSNM_CMPNM>
    <EMPLYM_CO>1</EMPLYM_CO>
    <FRST_REGIST_DT>2018-11-04T09:59:00</FRST_REGIST_DT>
</F169>
</bar>

код питона:

            import xml.etree.ElementTree as ET
            import xlsxwriter

            workbook = xlsxwriter.Workbook("parse.xlsx")
            worksheet = workbook.add_worksheet()
            bold = workbook.add_format({"bold":1})
            tree = ET.parse('estate(2).xml')

            col = 0
            i=0
            row = 0
            plus_row = 1

            print(tree.getiterator())

            for k in tree.iter('bar'):

                for j in k.iter():

                    print(j.text)
                    worksheet.write(row, col, j.findtext("pos"))
                    worksheet.write(row, col+1, j.findtext("X_CRDNT"))
                    worksheet.write(row, col+2, j.findtext("Y_CRDNT"))
                    worksheet.write(row, col+3, j.findtext("PNU"))
                    worksheet.write(row, col+4, j.findtext("LD_CPSG_CODE"))
                    worksheet.write(row, col+5, j.findtext("LD_EMD_LI_CODE"))
                    worksheet.write(row, col+6, j.findtext("REGSTR_SE_CODE"))
                    worksheet.write(row, col+7, j.findtext("MNNM"))
                    worksheet.write(row, col+8, j.findtext("SLNO"))
                    worksheet.write(row, col+9, j.findtext("SYS_REGIST_NO"))
                    worksheet.write(row, col+10, j.findtext("BSNM_CMPNM"))
                    worksheet.write(row, col+11, j.findtext("EMPLYM_CO"))
                    worksheet.write(row, col+12, j.findtext("FRST_REGIST_DT"))
                    if j.get("ETC_ADRES") is not "true":
                        worksheet.write(row, col+13, j.findtext("ETC_ADRES"))

                    row += 1

                """
                j = 0
                if i is 0:
                    row += 1
                    i+=1
                elif i >= 1 and i<=16:
                    continue
                elif i > 16:
                    i = 0
                """

            print(k.iter())
            #convert to .xlsx
            worksheet.write("A1", 'pos', bold)
            worksheet.write("B1", 'X_CRDNT', bold)
            worksheet.write("C1", 'Y_CRDNT', bold)
            worksheet.write("D1", 'PNU', bold)
            worksheet.write("E1", 'LD_CPSG_CODE', bold)
            worksheet.write("F1", 'LD_EMD_LI_CODE', bold)
            worksheet.write("G1", 'REGSTR_SE_CODE', bold)
            worksheet.write("H1", 'MNNM', bold)
            worksheet.write("I1", 'SLNO', bold)
            worksheet.write("J1", 'SYS_REGIST_NO', bold)
            worksheet.write("K1", 'BSNM_CMPNM', bold)
            worksheet.write("L1", 'EMPLYM_CO', bold)
            worksheet.write("M1", 'FRST_REGIST_DT', bold)


            workbook.close()

Этот код Python будет записывать parse.xlsx информацию о недвижимости (2) .xml Информация в XML отображается в файле Excel без пробела. файл Excel с пробелами

1 Ответ

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

Как написано, ваш код содержит две проблемы:

  1. В следующих вложенных циклах k проходит через все элементы bar (из которых только один), а затем j проходит через все элементы-потомки k:

        for k in tree.iter('bar'):
    
            for j in k.iter():
    
                print(j.text)
                # ...
    

    Когда j является одним из элементов <f169>, строка данных читается из его дочерних элементов. Однако j также проходит через элементы-потомки элемента <bar> (<pos>, <X_CRDNT>, <Y_CRDNT>). Эти другие элементы не имеют дочерних элементов, поэтому, если j является одним из них, j.findtext('MNNM') ничего не вернет. Следовательно, вы получаете пустую строку для каждого элемента-потомка <f169>.

    Исправление - заменить for j in k.iter(): на for j in k.iter('f169'):. Таким образом, j перебирает только элементы <f169>.

  2. В конце вы пишете заголовки над первой строкой данных. Чтобы избежать этой проблемы, установите row = 1 вместо row = 0 в начале.

...