Forum Coders' city Strona Główna Coders' city
Nasza pasja to programowanie!
 

 PomocPomoc   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy  RejestracjaRejestracja 
Archiwum starego forum + teoria    RSS & Panel/SideBar
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Potrzebuję szybkiej odpowiedzi na moje pytanie... Zasady

Praca na pliku XML



 
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Python
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Caporeira



Dołączył: 26 Lis 2015
Posty: 49

PostWysłany: Czw Lut 18, 2016 4:52 pm  OP    Temat postu: Praca na pliku XML Odpowiedz z cytatem Pisownia

Zacząłem działać w pythonie i jest to mój pierwszy program więc proszę o wyrozumiałość.
Jasne / zrozumiałem wskazówki :)

Utknąłem i potrzebuję waszej pomocy.

Aktualny kod wypluwa mi coś takiego (pobiera to z excela):

V004 AS01.01
V008 AS01.01
V009 AS01.01
V015 AS01.01
V016 AS01.01

W tym momencie dobrym sposobem będzie chyba zapisaniem tego do tabilcy ? - Jak to zapisać do tablicy ?

W kolejny etapie potrzebuje wczytać plik xml. Przeszukać i zamienić stringi.

Ładuję plik example.xml

Szukam stringu 'element' i zamieniam na 'V004'
Szukam stringu 'adres' i zamieniam na 'AS01.01'
Szukam stringu 'obszar' i zamieniam na 'AS01'
I zapisuje plik jako V004.xml

Następnie to samo z tym że będą to dane z drugiej linijki (V008 AS01.01 )
Szukam stringu 'element' i zamieniam na 'V008'
Szukam stringu 'adres' i zamieniam na 'AS01.01'
Szukam stringu 'obszar' i zamieniam na 'AS01'
I zapisuje plik jako V008.xml

itd.

Pomoże mi ktoś ?

Pracuje na python 3.5

Oto kod:
Kod:
import openpyxl
import xml.etree.ElementTree
from xml.dom import minidom
import xml.etree.ElementTree as ET



wb = openpyxl.load_workbook('example.xlsx')                                 # wczytuje plik do zmiennej
sheet = wb.get_sheet_by_name('Query')                                       # pobieram zakladke i przypisuje do zmiennej

row_count = sheet.max_row                                                   # licze ilosc wiersz

for i in range(3, row_count+1):                                             # ustalam zakres
        if 'Scanner' in sheet.cell(row=i, column=4).value:                  # jesli string w stringu
            #print(i, sheet.cell(row=i, column=1).value + ' ' + sheet.cell(row=i, column=3).value)
            print(sheet.cell(row=i, column=1).value + ' ' + sheet.cell(row=i, column=3).value[3:10])




tree = ET.parse('example.xml')
root = tree.getroot()



PS. Do tego wszystkiego wypluwa mi takie ostrzeżenie:

Cytat:
Warning (from warnings module):
File "C:Python35\lib\site-packages\openpyxl\workbook\names\named_range.py", line 125
warnings.warn("Discarded range with reserved name")
UserWarning: Discarded range with reserved name
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
hurgadion



Dołączył: 06 Kwi 2011
Posty: 853
Skąd: Web :)

PostWysłany: Pią Lut 19, 2016 2:10 pm      Temat postu: Odpowiedz z cytatem Pisownia

Witam,
to raczej standard, przejrzyj ten link, pozdrawiam.

_________________
miasto nauki praktycznej
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora Numer GG
Caporeira



Dołączył: 26 Lis 2015
Posty: 49

PostWysłany: Pią Lut 19, 2016 11:21 pm  OP    Temat postu: Odpowiedz z cytatem Pisownia

Zrobiłem coś takiego:

Kod:
zamiany = {
  'U001':result[0][0],
  'WE01.01':result[0][1]
}

dane = open('example.xml', "r").read()

for zmiana in zamiany:
    dane.replace(zmiana, zamiany[zmiana])

open('wynik.xml', "w").write(dane)



ale kod nie dokonuje żadnych zmian w pliku a jedynie robi jego kopię.
Pytanie, czemu to nie zamienia stringów ?
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
hurgadion



Dołączył: 06 Kwi 2011
Posty: 853
Skąd: Web :)

PostWysłany: Sob Lut 20, 2016 7:53 am      Temat postu: Odpowiedz z cytatem Pisownia

zerknij teraz tutaj :)

wskazówka na przyszłość: nie bój się wujka Google pytać, to całkiem fajny wujek... :)

_________________
miasto nauki praktycznej
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora Numer GG
Caporeira



Dołączył: 26 Lis 2015
Posty: 49

PostWysłany: Sob Lut 20, 2016 11:58 am  OP    Temat postu: Odpowiedz z cytatem Pisownia

Dziękuje, oczywiście używam google, ale z racji że jestem początkujący nie znajduje zawsze to czego potrzebuje.
Np szukałem operacji na xml, a wystarczyło operacje na plikach :)

Próbuje na różne sposoby iść dalej, działa podmiana jednego string, ale jak potrzebuje dwóch czy trzech to w w pliku mam podwójną zawartość.

Kod:
zrodlo = open('example.xml').readlines()
cel = open(result[0][0]+'.xml', 'w')
for s in zrodlo:
    cel.write(s.replace('U001', result[0][0]))
    cel.write(s.replace('WE01.01', result[0][1]))
cel.close()


To chyba trzeba najpierw pozamieniać a na końcu zapisać plik ?
Dawałem samo s.replace('U001', result[0][0]) oraz cel.replace('U001', result[0][0]) a na końcu cel.write().
Ale nie idzie. Jak to rozwiązać ?
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
hurgadion



Dołączył: 06 Kwi 2011
Posty: 853
Skąd: Web :)

PostWysłany: Sob Lut 20, 2016 2:20 pm      Temat postu: Odpowiedz z cytatem Pisownia

zamiast tego
Kod:

for s in zrodlo:
    cel.write(s.replace('U001', result[0][0]))
    cel.write(s.replace('WE01.01', result[0][1]))


spróbuj może tak:
Kod:

for s in zrodlo:
    for key in zamiany.keys():
        s = s.replace(key, zamiany[key])
    cel.write(s)


Powinno pomóc, pozdrawiam :)

_________________
miasto nauki praktycznej
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora Numer GG
Caporeira



Dołączył: 26 Lis 2015
Posty: 49

PostWysłany: Nie Lut 21, 2016 1:37 am  OP    Temat postu: Odpowiedz z cytatem Pisownia

Dzięki, zadziałało!
Rozbudowałem to trochę i wygląda to następująco:

Kod:
for j in range(len(result)):
    zrodlo = open('example.xml').readlines()
    zamiany = {
  'U001':result[j][0],
  'WE01.01':result[j][1]
    }
    cel = open(result[j][0]+'.xml', 'w')
    for s in zrodlo:
        for key in zamiany.keys():
            s = s.replace(key, zamiany[key])
        cel.write(s)
cel.close()


Plik 'zamiany' będę chciał rozbudować. Stąd moje pytanie, czy polecenie replace będzie zawsze realizowało zadanie w tej samej kolejności według listy 'zamiany' ? Czyli od góry do dołu ?

PS. Szukam najlepiej po polski jak dodać stringi/tagi do xml-a. Ale nic ciekawego nie znajduję.
Może lepiej będzie czytać te tagi/stringi z innego pliku xml, ale tak czy inaczej później muszę je dodać w określone miejsce do xml-a.
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
hurgadion



Dołączył: 06 Kwi 2011
Posty: 853
Skąd: Web :)

PostWysłany: Nie Lut 21, 2016 11:23 am      Temat postu: Odpowiedz z cytatem Pisownia

Iteracja po słowniku będzie w takiej kolejności w jakiej będzie tworzona lista kluczy, pogmeraj w dokumentacji. Jeżeli chodzi o drugie pytanie, to proponuję poszukać dobrze w sieci, ode mnie to tyle, pozdrawiam.
_________________
miasto nauki praktycznej
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora Numer GG
Wyświetl posty z ostatnich:   
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Python Wszystkie czasy w strefie CET (Europa)

Strona 1 z 1

 
Skocz do:  
Możesz pisać nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Możesz dodawać załączniki na tym forum
Możesz pobierać pliki z tego forum




Debug: strone wygenerowano w 0.15384 sekund, zapytan = 11
contact

| Darmowe programy i porady Jelcyna | Tansze zakupy w Helionie | MS Office Blog |