Strona główna Polish Python Coders Group
   Strona główna   Pomoc Zaloguj się Rejestracja  
Witamy, Gość. Zaloguj się lub zarejestruj.
Czy dotarł do Ciebie email aktywacyjny?

Zaloguj się podając nazwę użytkownika, hasło i długość sesji

Aktualności: PyStok #31 - 8 maja 2018, 18:00, Białystok :: http://pystok.org/pystok-31/
Szukaj Szukaj
Strony: [1]   Do dołu
Drukuj
Wątek: Wyszukiwanie ciągu znakow  (Przeczytany 457 razy)
« : 11:45 14/02/18 »
Rzepetto Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 1


Witam serdecznie,
Jestem poczatkującym jeśli chodzi o pythona i niestety utknąłem w martwym punkcie.

Problem polega na tym, że potrzebuje wyszukać w pliku 'txt' wybranej fazy 'softversion' a następnie pobrać 4 pierwze znaki wersji.
cały wiersz wygląda następująco
<ns0:p name="softversion">WCP34_2394_0250</ns0:p> czasem
<p name="softversion">WCP34_2394_0250</p>
dodatkowo wiersz w każdym pliku znajduje się w innym wierszu.

Byłbym wdzięczny gdyby ktoś mnie nakierowal jak to zrobić
chcialem zastosować SW = txt_object.find('softversion') a nastepnie pobrać ciąg znaków od 3 do 6 znaku ale nie wiem jak to uczynic ;/
Zapisane
« Odpowiedz #1 : 16:15 14/02/18 »
kkonrad002 Offline
Hello World!

Zobacz profil
*

Reputacja: -2
Wiadomości: 16


Witam!

Też jestem żółtodziobem ale znalazłem rozwiązanie.
Albo przynajmniej wskazówkę. Używam Python 3.6 i PyCharm jako edytor.
Kod
string2='<ns0:p name="softversion">WCP34_2394_0250</ns0:p>'
string2n=(string2.split('">', 1)[1].split('</ns0', 1)[0])
print(string2n)
Zapisane
« Odpowiedz #2 : 16:34 14/02/18 »
DJangoL Offline
Professional Python User

Zobacz profil
***

Reputacja: 30
Wiadomości: 334


Rozwiązanie podane przez kolegę nie jest idealne, tu powinniście wykorzystać wyrażenia regularne.

https://docs.python.org/3/library/re.html
Zapisane
« Odpowiedz #3 : 17:03 14/02/18 »
jell Offline
Administrator
Expert Python User

Zobacz profil
*****

Reputacja: 65
Płeć: Mężczyzna
Wiadomości: 583


Za parsowanie xml regexpami w jezyku innym niz perl - powinno sie kastrowac, coby geny glupoty dalej sie nie propagowaly.

Jesli ma to dzialac szybko - poczytaj o SAX, powinienes sie przeiterowac po dokumencie sprawdzajac ktory element ma atrybut name z wartoscia rowna softversion. w przypadku uzycia lxml - z elementu interesowac bedzie ciebie .text (tj. jego pierwsze 4 znaki).
Jesli moze byc nieco wolniej, ale "latwiejsze" - http://lxml.de/tutorial.html#elementpath - wystarczy znalezc wyszukac po xpath:
Kod
with open("sciezka/do/pliku") as data:
   root = etree.XML(data.read())
   p = root.find(".//p/[@name='softversion']")
   print(p.text()[:4])
 
czy jakos podobnie.

Jak juz chcesz baaaaardzo nieladnie po prostu wyszukujac "softversion", przeskakujac kilka znakow i na chama brac 4 kolejne (NIE POLECAM TAK ROBIC):
Kod
data='<ns0:p name="softversion">WCP34_2394_0250</ns0:p>'
tofind='softversion'
index_after_data=data.index(tofind) + len(tofind)
print(data[index_after_data + 2:index_after_data + 6])
 

Raz jeszcze powtorze - uzywanie do czegos takiego regexpow jest tylko i wylacznie glupie...
Zapisane

The UNIX Guru`s view of Sex:
unzip; strip; touch; finger; mount; fsck; more; yes; umount; sleep
« Odpowiedz #4 : 17:09 14/02/18 »
jell Offline
Administrator
Expert Python User

Zobacz profil
*****

Reputacja: 65
Płeć: Mężczyzna
Wiadomości: 583


ps. generalnie polecam zapoznac sie z https://www.ibm.com/developerworks/library/x-hiperfparse/ - teraz wymaganie jest postawione dosc proste - ale gdyby okazalo sie ze trzeba w pliku to samo wyszukac kilka razy, lub przy jakichs innych okreslonych warunkach - robiac "proste" rozwiazanie strzelamy sobie w stope. do tego juz sa dobre narzedzia i wypracowane metody...
Zapisane

The UNIX Guru`s view of Sex:
unzip; strip; touch; finger; mount; fsck; more; yes; umount; sleep
« Odpowiedz #5 : 22:34 14/02/18 »
DJangoL Offline
Professional Python User

Zobacz profil
***

Reputacja: 30
Wiadomości: 334


W sumie nie zauważyłem za pierwszym razem że to XML, kolega wyciągnął jedną linię...


Raz jeszcze powtorze - uzywanie do czegos takiego regexpow jest tylko i wylacznie glupie...

Pewnie masz rację, ale to na pewno też zależy od wielkości tego pliku. W dużych plikach XML z pewnością odbiłoby się to na czasie, ale w małych może mieć pomijalne znaczenie.
Zapisane
« Odpowiedz #6 : 22:42 14/02/18 »
jell Offline
Administrator
Expert Python User

Zobacz profil
*****

Reputacja: 65
Płeć: Mężczyzna
Wiadomości: 583


przytocze klasyka, co prawda o html, ale to niedaleko - https://stackoverflow.com/a/1732454
Zapisane

The UNIX Guru`s view of Sex:
unzip; strip; touch; finger; mount; fsck; more; yes; umount; sleep
« Odpowiedz #7 : 23:07 14/02/18 »
kkonrad002 Offline
Hello World!

Zobacz profil
*

Reputacja: -2
Wiadomości: 16


Kurcze ludziska !

Ja dopiero 2 tygodnie uczę się o pythonie nawet słowa typu regexpy itp. To dla mnie "czary mary" Ja jestem dopiero na poziomie rozróżniania stringa od float i intiger. hihi. Troszkę rozumiem już jak to działa ale to pewnie mniej niż 1% tego co znają eksperci.
Wpadłem na pomysł jak problem rozwiązać a moje podejście było jak widzę jak  przedszkolaka - SORKI!

Kiedyś dorosnę i też będę tak mądry.
Pomimo to dziękuję że dzielicie się swoją wiedzą.

Zapisane
« Odpowiedz #8 : 01:28 15/02/18 »
jell Offline
Administrator
Expert Python User

Zobacz profil
*****

Reputacja: 65
Płeć: Mężczyzna
Wiadomości: 583


zle do tego podchodzisz Mrugnięcie
nie jestesmy "ekspertami" - po prostu "praktykujemy", a to wymaga jedynie czasu, pracy.
im wiecej bedziesz mial problemow do rozwiazania i im wiecej im poswiecisz czasu - tym z czasem bedzie latwiej i przyjemniej Mrugnięcie
choc tak na prawde niewiele kolejnych nowych rozwiazan daje taka satysfakcje jak pierwsze roztrzaskane problemy, jak pierwsze znalezione rozwiazania - doslownie jak z narkotykami Mrugnięcie
Zapisane

The UNIX Guru`s view of Sex:
unzip; strip; touch; finger; mount; fsck; more; yes; umount; sleep
« Odpowiedz #9 : 15:55 25/02/18 »
kkonrad002 Offline
Hello World!

Zobacz profil
*

Reputacja: -2
Wiadomości: 16


Ok Więc może dopytam...

O co chodzi z tymi Sax-ami i jak rozwiązać faktycznie ten problem gdyby w xml czy pliku tekstowym znajdowało się więcej oznaczeń softversion.
Gdzie poszukać rozwiązań jak nie na forum?

Dzięki
Zapisane
Strony: [1]   Do góry
Drukuj
Skocz do:  

© 2007 - 2018 Polish Python Coders Group
Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines | Theme by PixelSlot