[파이썬] 엑셀 파일에 작성하는 중 버그
조회수 935회
<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>
와 같은 XML 파일을 엑셀에 저장하려고 합니다.
# following estate_text.xml, edit new file before use the program
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.xml')
row = 1
col = 0
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"))
row += 1
#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)
workbook.close()
"""
elem.findtext("X_CRDNT")
elem.findtext("Y_CRDNT")
elem.findtext("PNU")
elem.findtext("LD_CPSG_CODE")
elem.findtext("LD_EMD_LI_CODE")
elem.findtext("REGSTR_SE_CODE")
elem.findtext("MNNM")
elem.findtext("SLNO")
"""
각 값들을 행을 하나씩 아래로 추가하면서 데이터들을 작성하고 싶은데 16칸? 정도가 빈 채로 작성이 되네요. 제 생각에는 파이썬 코드에서 row += 1이 XML의 F169의 하위 태그 개수가 16개 정도가 되서 "for k in tree.iter('bar'): for j in k.iter():" 부분 때문에 16칸이 비는 것 같은데. 어떻게 하면 빈 칸이 발생하지 않도록 할 수 있을지 궁금합니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
row += 1
을for j in k.iter():
블록이 아니라for k in tree.iter('bar'):
블록에 넣으면 될 것 같습니다. (즉, 한번 unindent 하면 될 듯)- 우선 답변주셔서 감사합니다. 말씀해주신 방법대로도 해보았는데, 알 수 없는 사용자 2019.1.26 20:28
- for k in tree.iter('bar'): 블럭에 row+=1을 추가하면 엑셀 파일을 열어보았을 때, 2행에만 정보가 나옵니다. 제 생각에는 '덮여쓰기'가 되서 그런 것 같은데.. 알 수 없는 사용자 2019.1.26 20:29
- 해결되었습니다. 알 수 없는 사용자 2019.1.27 01:32
- for j in k.iter(F169) 하니 공백이 발생하지 않네요 알 수 없는 사용자 2019.1.27 01:33
댓글 입력