Saída em Python no formato XML

0

Eu tenho um script python que compara a lista de IPs com o banco de dados IP e fornece resultados de critérios correspondentes. (Eu tenho o script deste fórum).

convert.py

    #!/usr/bin/python
    import socket,struct
    db=[]
    for l in open("database.txt"):
        fields=l.split();
        db.append((int(fields[0]),int(fields[1]),fields[-2],fields[-1]))

    for l in open("iplist.txt"):
        ip=struct.unpack('!I',socket.inet_aton(l))[0]
        for e in db:
            if e[0]<=ip<=e[1]:
                print l.strip(),e[2],e[3]
                break

A saída está no formato csv e eu quero a saída em XML, estou conseguindo isso usando o comando AWK,

awk -F" " 'BEGIN{print"<markers>"} {printf"<marker information=\"%s\" Longitude=\"%s\" Latitude=\"%s\" />\n",$1,$3,$2} END{print"</markers>"}' mapinfo.csv

Eu posso usar o seguinte comando para combinar os dois,

./convert.py | awk -F" " 'BEGIN{print"<markers>"} {printf"<marker information=\"%s\" Longitude=\"%s\" Latitude=\"%s\" />\n",$1,$3,$2} END{print"</markers>"}'

Alguma ajuda sobre como posso usar o awk dentro do próprio script python ou de qualquer outra maneira para exibir no formato necessário?

Saída:

<markers>
<marker information="168.144.247.215" Longitude="-79.377040" Latitude="43.641233" />
<marker information="169.255.59.2" Longitude="28.043630" Latitude="-26.202270" />
<marker information="173.230.253.193" Longitude="-83.227531" Latitude="42.461234" />
<marker information="173.247.245.154" Longitude="-118.343030" Latitude="34.091104" />
<marker information="174.142.197.90" Longitude="-73.587810" Latitude="45.508840" />
<marker information="175.107.192.78" Longitude="67.082200" Latitude="24.905600" />
</markers>
    
por Karthik 02.07.2015 / 09:24

1 resposta

2

Este exemplo pressupõe que todo o conteúdo csv esteja em um arquivo chamado a.csv ... você pode alterá-lo para usar stdout stream em vez de file stream

e fora de preguiça, eu coloco longitude, latitude como sub-elementos .. você pode colocá-los como atributos também

 from xml.etree.ElementTree import Element, SubElement, Comment, tostring

top = Element('markers')
f = open('a.csv')
for line in f:
  split_list = line.strip().split(',')
  information_txt = split_list[0]
  longitude_txt = split_list[1]
  latitude_txt = split_list[2]
  marker = SubElement(top, 'marker')
  info = SubElement(marker, 'information')
  info.text = information_txt
  longitude = SubElement(marker, 'longitude')
  longitude.text = longitude_txt
  latitude = SubElement(marker, 'latitude')
  latitude.text = latitude_txt

print tostring(top)
    
por 02.07.2015 / 11:43