eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › elementarne pytania z pythona
Ilość wypowiedzi w tym wątku: 17

  • 11. Data: 2020-04-11 11:33:53
    Temat: Re: elementarne pytania z pythona
    Od: Piotr Chamera <p...@p...onet.pl>

    W dniu 2020-04-11 o 11:16, fir pisze:
    > W dniu piątek, 10 kwietnia 2020 20:35:21 UTC+2 użytkownik fir napisał:
    >> W dniu piątek, 10 kwietnia 2020 19:33:33 UTC+2 użytkownik Piotr Chamera napisał:
    >>> W dniu 2020-04-10 o 12:59, fir pisze:
    >>>> ostatnio troche odpoczalem i mysle sobie by cos postudiowac moze rootkity moze
    opencl..ale stanelo jadnak na podstawah pythona ;C
    >>>>
    >>>> morugam bo jest to troche lamerskie ale z drugiej strony potrzebowalem napisac
    bota na nasz ircowy kanal
    >>>>
    >>>> nie znam jednak zupelnych podstaw na dwutygodniowe lektury podrecznikow troche
    szkoda mi czasu i moze tu bedzie szybciej
    >>>>
    >>>> mam test typu
    >>>>
    >>>> msg = "cytuj pnnn 1232"
    >>>>
    >>>> i potrzebuje dobrac sie do tej trzeciej liczby i pobrac jej wartosc, pod
    warunkiem ze pocztek stringa bedzie wlasnie "cytuj pnnn" z kolei jesli tam bedzie nic
    albo nie liczna tez chcialbym miec to zdetektowane
    >>>>
    >>>> jaki to kod? tnx
    >>>
    >>> Można użyć wyrażeń, regularnych (pisałem w pythonie 2.7, w 3.x powinno
    >>> być podobnie)
    >>>
    >>> import re
    >>> m = re.match(u"(cytuj pnnn )(\d+)", msg)
    >>>
    >>> jeśli nie dopasuje do wzorca m będzie None
    >>> jeśli dopasuje, to za pomocą group() można pobrać poszczególne części
    >>> dopasowania
    >>>
    >>> >>> m.group(0)
    >>> u'cytuj pnnn 1234'
    >>>
    >>> >>> m.group(1)
    >>> u'cytuj pnnn '
    >>>
    >>> >>> m.group(2)
    >>> u'1234'
    >>>
    >>> >>> int(m.group(2))
    >>> 1234
    >>
    >> ok tnx zobacze troche pozniej, tez python 2.7
    >
    > nie dziala ale poprawdzie to troche uproscilem konkretny string jest taki
    >
    > :fir!~pirc@vhost:freedom.freakz PRIVMSG #grunge :minion ogniem 222
    >
    >
    > chodzi o to by ignorowal poczatek wymagal ":minion ogniem" i bral liczbe po tym
    >
    > ta liczba pozniej jest numerem lini z pliku tekstaowego ksiazki np "ogniem i
    mieczem" ktor moj bot minion zacytuje na kanal
    >
    > wie moze kolega?
    >
    > (wiem ze moglbym sie wczytac ale narazi enie mam sily i poszukuje prostej drogi
    poki nie skumuluje energii)
    >

    Warto przejrzeć przynajmniej dokumentację modułu wyrażeń regularnach.
    przy dopasowaniu wzorców tekstowych to bardzo dobre narządzie.

    >>> import re
    >>> msg = u":fir!~pirc@vhost:freedom.freakz PRIVMSG #grunge :minion
    ogniem 222"
    >>> m = re.match(u".*?(:minion ogniem )(\d+)", msg)
    >>> int(m.group(2))
    222


  • 12. Data: 2020-04-11 11:55:43
    Temat: Re: elementarne pytania z pythona
    Od: fir <p...@g...com>

    W dniu sobota, 11 kwietnia 2020 11:33:54 UTC+2 użytkownik Piotr Chamera napisał:
    > W dniu 2020-04-11 o 11:16, fir pisze:
    > > W dniu piątek, 10 kwietnia 2020 20:35:21 UTC+2 użytkownik fir napisał:
    > >> W dniu piątek, 10 kwietnia 2020 19:33:33 UTC+2 użytkownik Piotr Chamera napisał:
    > >>> W dniu 2020-04-10 o 12:59, fir pisze:
    > >>>> ostatnio troche odpoczalem i mysle sobie by cos postudiowac moze rootkity moze
    opencl..ale stanelo jadnak na podstawah pythona ;C
    > >>>>
    > >>>> morugam bo jest to troche lamerskie ale z drugiej strony potrzebowalem napisac
    bota na nasz ircowy kanal
    > >>>>
    > >>>> nie znam jednak zupelnych podstaw na dwutygodniowe lektury podrecznikow troche
    szkoda mi czasu i moze tu bedzie szybciej
    > >>>>
    > >>>> mam test typu
    > >>>>
    > >>>> msg = "cytuj pnnn 1232"
    > >>>>
    > >>>> i potrzebuje dobrac sie do tej trzeciej liczby i pobrac jej wartosc, pod
    warunkiem ze pocztek stringa bedzie wlasnie "cytuj pnnn" z kolei jesli tam bedzie nic
    albo nie liczna tez chcialbym miec to zdetektowane
    > >>>>
    > >>>> jaki to kod? tnx
    > >>>
    > >>> Można użyć wyrażeń, regularnych (pisałem w pythonie 2.7, w 3.x powinno
    > >>> być podobnie)
    > >>>
    > >>> import re
    > >>> m = re.match(u"(cytuj pnnn )(\d+)", msg)
    > >>>
    > >>> jeśli nie dopasuje do wzorca m będzie None
    > >>> jeśli dopasuje, to za pomocą group() można pobrać poszczególne części
    > >>> dopasowania
    > >>>
    > >>> >>> m.group(0)
    > >>> u'cytuj pnnn 1234'
    > >>>
    > >>> >>> m.group(1)
    > >>> u'cytuj pnnn '
    > >>>
    > >>> >>> m.group(2)
    > >>> u'1234'
    > >>>
    > >>> >>> int(m.group(2))
    > >>> 1234
    > >>
    > >> ok tnx zobacze troche pozniej, tez python 2.7
    > >
    > > nie dziala ale poprawdzie to troche uproscilem konkretny string jest taki
    > >
    > > :fir!~pirc@vhost:freedom.freakz PRIVMSG #grunge :minion ogniem 222
    > >
    > >
    > > chodzi o to by ignorowal poczatek wymagal ":minion ogniem" i bral liczbe po tym
    > >
    > > ta liczba pozniej jest numerem lini z pliku tekstaowego ksiazki np "ogniem i
    mieczem" ktor moj bot minion zacytuje na kanal
    > >
    > > wie moze kolega?
    > >
    > > (wiem ze moglbym sie wczytac ale narazi enie mam sily i poszukuje prostej drogi
    poki nie skumuluje energii)
    > >
    >
    > Warto przejrzeć przynajmniej dokumentację modułu wyrażeń regularnach.
    > przy dopasowaniu wzorców tekstowych to bardzo dobre narządzie.
    >
    > >>> import re
    > >>> msg = u":fir!~pirc@vhost:freedom.freakz PRIVMSG #grunge :minion
    > ogniem 222"
    > >>> m = re.match(u".*?(:minion ogniem )(\d+)", msg)
    > >>> int(m.group(2))
    > 222

    ale jak odrzucic kod z tym none
    ten kod chyba dziala ale czy m moze byc none? i czy skipnie to say gdy nie znajdzie
    wyrazenia? (doucze sie z tego z czasem ale narzie nie che sie w to zbyt wczytywac,
    cala amsa innych rzeczy nie robi tymczasem problemu )

    mm = re.match(u".*?(:minion ogniem )(\d+)", ircmsg)

    m = int(mm.group(2))

    if m :
    say( ogniem_i_mieczem_text[m])
    say( ogniem_i_mieczem_text[m+1])


  • 13. Data: 2020-04-11 12:06:05
    Temat: Re: elementarne pytania z pythona
    Od: fir <p...@g...com>

    W dniu sobota, 11 kwietnia 2020 11:55:45 UTC+2 użytkownik fir napisał:
    > W dniu sobota, 11 kwietnia 2020 11:33:54 UTC+2 użytkownik Piotr Chamera napisał:
    > > W dniu 2020-04-11 o 11:16, fir pisze:
    > > > W dniu piątek, 10 kwietnia 2020 20:35:21 UTC+2 użytkownik fir napisał:
    > > >> W dniu piątek, 10 kwietnia 2020 19:33:33 UTC+2 użytkownik Piotr Chamera
    napisał:
    > > >>> W dniu 2020-04-10 o 12:59, fir pisze:
    > > >>>> ostatnio troche odpoczalem i mysle sobie by cos postudiowac moze rootkity
    moze opencl..ale stanelo jadnak na podstawah pythona ;C
    > > >>>>
    > > >>>> morugam bo jest to troche lamerskie ale z drugiej strony potrzebowalem
    napisac bota na nasz ircowy kanal
    > > >>>>
    > > >>>> nie znam jednak zupelnych podstaw na dwutygodniowe lektury podrecznikow
    troche szkoda mi czasu i moze tu bedzie szybciej
    > > >>>>
    > > >>>> mam test typu
    > > >>>>
    > > >>>> msg = "cytuj pnnn 1232"
    > > >>>>
    > > >>>> i potrzebuje dobrac sie do tej trzeciej liczby i pobrac jej wartosc, pod
    warunkiem ze pocztek stringa bedzie wlasnie "cytuj pnnn" z kolei jesli tam bedzie nic
    albo nie liczna tez chcialbym miec to zdetektowane
    > > >>>>
    > > >>>> jaki to kod? tnx
    > > >>>
    > > >>> Można użyć wyrażeń, regularnych (pisałem w pythonie 2.7, w 3.x powinno
    > > >>> być podobnie)
    > > >>>
    > > >>> import re
    > > >>> m = re.match(u"(cytuj pnnn )(\d+)", msg)
    > > >>>
    > > >>> jeśli nie dopasuje do wzorca m będzie None
    > > >>> jeśli dopasuje, to za pomocą group() można pobrać poszczególne części
    > > >>> dopasowania
    > > >>>
    > > >>> >>> m.group(0)
    > > >>> u'cytuj pnnn 1234'
    > > >>>
    > > >>> >>> m.group(1)
    > > >>> u'cytuj pnnn '
    > > >>>
    > > >>> >>> m.group(2)
    > > >>> u'1234'
    > > >>>
    > > >>> >>> int(m.group(2))
    > > >>> 1234
    > > >>
    > > >> ok tnx zobacze troche pozniej, tez python 2.7
    > > >
    > > > nie dziala ale poprawdzie to troche uproscilem konkretny string jest taki
    > > >
    > > > :fir!~pirc@vhost:freedom.freakz PRIVMSG #grunge :minion ogniem 222
    > > >
    > > >
    > > > chodzi o to by ignorowal poczatek wymagal ":minion ogniem" i bral liczbe po tym
    > > >
    > > > ta liczba pozniej jest numerem lini z pliku tekstaowego ksiazki np "ogniem i
    mieczem" ktor moj bot minion zacytuje na kanal
    > > >
    > > > wie moze kolega?
    > > >
    > > > (wiem ze moglbym sie wczytac ale narazi enie mam sily i poszukuje prostej drogi
    poki nie skumuluje energii)
    > > >
    > >
    > > Warto przejrzeć przynajmniej dokumentację modułu wyrażeń regularnach.
    > > przy dopasowaniu wzorców tekstowych to bardzo dobre narządzie.
    > >
    > > >>> import re
    > > >>> msg = u":fir!~pirc@vhost:freedom.freakz PRIVMSG #grunge :minion
    > > ogniem 222"
    > > >>> m = re.match(u".*?(:minion ogniem )(\d+)", msg)
    > > >>> int(m.group(2))
    > > 222
    >
    > ale jak odrzucic kod z tym none
    > ten kod chyba dziala ale czy m moze byc none? i czy skipnie to say gdy nie znajdzie
    wyrazenia? (doucze sie z tego z czasem ale narzie nie che sie w to zbyt wczytywac,
    cala amsa innych rzeczy nie robi tymczasem problemu )
    >
    > mm = re.match(u".*?(:minion ogniem )(\d+)", ircmsg)
    >
    > m = int(mm.group(2))
    >
    > if m :
    > say( ogniem_i_mieczem_text[m])
    > say( ogniem_i_mieczem_text[m+1])

    jeszcze jedno pytanke, jesli mozn, ulatwiloby mi sprawe

    to ogniem i mieczem przkonwertowalem sobie z epub na txt jakism konwerterem
    zachowal unicode itd chyab wszystko jest ok poza faktem ze tam gdzie powinno byc
    jedno newline 0x0d 0x0a pwoiedzmy jest za kazdym razem 0x0a 0x0a 0x0a (trzy 0A)
    i wiekszosc edytorow traktuje to jako 3 newliny

    jak sprawdzc czy
    ogniem_i_mieczem_text[m] jest pojedyncza linia z 0x0a? ew jak napisac prsty konwerter
    w pythonie ktory by polknal plik i zamianil kazde 3 0x0A na jedno 0xA

    tnx


  • 14. Data: 2020-04-11 12:09:10
    Temat: Re: elementarne pytania z pythona
    Od: Piotr Chamera <p...@p...onet.pl>

    W dniu 2020-04-11 o 11:55, fir pisze:
    > ale jak odrzucic kod z tym none
    > ten kod chyba dziala ale czy m moze byc none? i czy skipnie to say gdy nie znajdzie
    wyrazenia? (doucze sie z tego z czasem ale narzie nie che sie w to zbyt wczytywac,
    cala amsa innych rzeczy nie robi tymczasem problemu )
    >
    > mm = re.match(u".*?(:minion ogniem )(\d+)", ircmsg)
    >
    > m = int(mm.group(2))
    >
    > if m :
    > say( ogniem_i_mieczem_text[m])
    > say( ogniem_i_mieczem_text[m+1])
    >

    to raczej powinno być tak, bo jak nie dopasuje,
    to w mm jest None i nie ma czego zamienić na inta:

    mm = re.match(u".*?(:minion ogniem )(\d+)", ircmsg)
    if mm :
    m = int(mm.group(2))
    say( ogniem_i_mieczem_text[m])
    say( ogniem_i_mieczem_text[m+1])


  • 15. Data: 2020-04-11 12:12:34
    Temat: Re: elementarne pytania z pythona
    Od: fir <p...@g...com>

    W dniu sobota, 11 kwietnia 2020 12:09:12 UTC+2 użytkownik Piotr Chamera napisał:
    > W dniu 2020-04-11 o 11:55, fir pisze:
    > > ale jak odrzucic kod z tym none
    > > ten kod chyba dziala ale czy m moze byc none? i czy skipnie to say gdy nie
    znajdzie wyrazenia? (doucze sie z tego z czasem ale narzie nie che sie w to zbyt
    wczytywac, cala amsa innych rzeczy nie robi tymczasem problemu )
    > >
    > > mm = re.match(u".*?(:minion ogniem )(\d+)", ircmsg)
    > >
    > > m = int(mm.group(2))
    > >
    > > if m :
    > > say( ogniem_i_mieczem_text[m])
    > > say( ogniem_i_mieczem_text[m+1])
    > >
    >
    > to raczej powinno być tak, bo jak nie dopasuje,
    > to w mm jest None i nie ma czego zamienić na inta:
    >
    > mm = re.match(u".*?(:minion ogniem )(\d+)", ircmsg)
    > if mm :
    > m = int(mm.group(2))
    > say( ogniem_i_mieczem_text[m])
    > say( ogniem_i_mieczem_text[m+1])

    ok, a co z tym 0x0a ?


  • 16. Data: 2020-04-11 12:59:19
    Temat: Re: elementarne pytania z pythona
    Od: Piotr Chamera <p...@p...onet.pl>

    W dniu 2020-04-11 o 12:06, fir pisze:
    > jeszcze jedno pytanke, jesli mozn, ulatwiloby mi sprawe
    >
    > to ogniem i mieczem przkonwertowalem sobie z epub na txt jakism konwerterem
    > zachowal unicode itd chyab wszystko jest ok poza faktem ze tam gdzie powinno byc
    jedno newline 0x0d 0x0a pwoiedzmy jest za kazdym razem 0x0a 0x0a 0x0a (trzy 0A)
    > i wiekszosc edytorow traktuje to jako 3 newliny
    >
    > jak sprawdzc czy
    > ogniem_i_mieczem_text[m] jest pojedyncza linia z 0x0a? ew jak napisac prsty
    konwerter w pythonie ktory by polknal plik i zamianil kazde 3 0x0A na jedno 0xA

    To już moja ostatnia odpowiedź dzisiaj.


    Konwersja całości, to najprościej chyba jakoś tak:

    s jest twoim źródłowym tekstem

    >>> s.replace(u"\u000a\u000a\u000a", u"\u000a")

    albo

    >>> s.replace(u"\n\n\n", u"\n")

    ale nie wiem, czy interpretacja \n nie zależy od systemu

    uwaga: to zwraca nowego stringa, nie podmienia w oryginalnym.




    A sprawdzania można zrobić np. tak:

    przykładowy wieloliniowy tekst:

    s = u"""ahjklsl


    ajkshgjkgh


    hsajhkjhskj


    hnajkhjhjl"""


    poniższe sprawdza czy podany tekst dzieli się na określone 3 części

    >>> m = re.match(u"(.*?)(\u000a+)(.*)", s, flags=re.DOTALL)

    (.*?) ta grupa dopasowuje dowolny tekst w sposób niezachłanny
    (\u000a+) ta grupa dopasowuje jeden lub więcej znaków końca linii
    (.*) tu wpychamy całą resztę tekstu

    i teraz możemy sprawdzić

    jaki był pierwszy wiersz

    >>> m.group(1)
    u'ahjklsl'

    ile znaków końca linii było po pierwszym wierszu
    >>> len(m.group(2))
    3
    >>> m.group(2)
    u'\n\n\n'

    czy w tekście było coś jeszcze
    >>> len(m.group(3))
    37
    >>> m.group(3)
    u'ajkshgjkgh\n\n\nhsajhkjhskj\n\n\nhnajkhjhjl'


  • 17. Data: 2020-04-11 13:04:42
    Temat: Re: elementarne pytania z pythona
    Od: fir <p...@g...com>

    W dniu sobota, 11 kwietnia 2020 12:59:21 UTC+2 użytkownik Piotr Chamera napisał:
    > W dniu 2020-04-11 o 12:06, fir pisze:
    > > jeszcze jedno pytanke, jesli mozn, ulatwiloby mi sprawe
    > >
    > > to ogniem i mieczem przkonwertowalem sobie z epub na txt jakism konwerterem
    > > zachowal unicode itd chyab wszystko jest ok poza faktem ze tam gdzie powinno byc
    jedno newline 0x0d 0x0a pwoiedzmy jest za kazdym razem 0x0a 0x0a 0x0a (trzy 0A)
    > > i wiekszosc edytorow traktuje to jako 3 newliny
    > >
    > > jak sprawdzc czy
    > > ogniem_i_mieczem_text[m] jest pojedyncza linia z 0x0a? ew jak napisac prsty
    konwerter w pythonie ktory by polknal plik i zamianil kazde 3 0x0A na jedno 0xA
    >
    > To już moja ostatnia odpowiedź dzisiaj.
    >
    >
    > Konwersja całości, to najprościej chyba jakoś tak:
    >
    > s jest twoim źródłowym tekstem
    >
    > >>> s.replace(u"\u000a\u000a\u000a", u"\u000a")
    >
    > albo
    >
    > >>> s.replace(u"\n\n\n", u"\n")
    >
    > ale nie wiem, czy interpretacja \n nie zależy od systemu
    >
    > uwaga: to zwraca nowego stringa, nie podmienia w oryginalnym.
    >
    >
    >
    >
    > A sprawdzania można zrobić np. tak:
    >
    > przykładowy wieloliniowy tekst:
    >
    > s = u"""ahjklsl
    >
    >
    > ajkshgjkgh
    >
    >
    > hsajhkjhskj
    >
    >
    > hnajkhjhjl"""
    >
    >
    > poniższe sprawdza czy podany tekst dzieli się na określone 3 części
    >
    > >>> m = re.match(u"(.*?)(\u000a+)(.*)", s, flags=re.DOTALL)
    >
    > (.*?) ta grupa dopasowuje dowolny tekst w sposób niezachłanny
    > (\u000a+) ta grupa dopasowuje jeden lub więcej znaków końca linii
    > (.*) tu wpychamy całą resztę tekstu
    >
    > i teraz możemy sprawdzić
    >
    > jaki był pierwszy wiersz
    >
    > >>> m.group(1)
    > u'ahjklsl'
    >
    > ile znaków końca linii było po pierwszym wierszu
    > >>> len(m.group(2))
    > 3
    > >>> m.group(2)
    > u'\n\n\n'
    >
    > czy w tekście było coś jeszcze
    > >>> len(m.group(3))
    > 37
    > >>> m.group(3)
    > u'ajkshgjkgh\n\n\nhsajhkjhskj\n\n\nhnajkhjhjl'

    ok, tnx w sumie ten plik przerobilem sobie programikiem w c

    #include "green-fire.h"



    int main()
    {
    chunk file = LoadChunk("file.txt");

    int len = ChunkLength(file);

    FILE *f = fopen("tile_out.txt", "wb");

    for(int i=0; i<len; i++)
    {
    if(file.beg[i]==0xa && file.beg[i+1]==0xa) continue;

    fputc(file.beg[i], f);
    }

    fclose(f);

    return 2020;

    }
    poki co costam dziala ale czas odpoczac

strony : 1 . [ 2 ]


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: