Witamy!

Forum dla profesjonalistów i entuzjastów systemu Odoo. Dyskusje, porady, opinie, komentarze.

0

Czyszczenie "stringów" ? ............ nie chodzi o bieliznę [Zamknięte]

przez
Dr.One
na 09.09.2015, 22:00 1033 odsłony

- Pytanie został zamknięty z powodu: niezwiązane z tematem lub nieaktualne

przez
Dr.One
na 22.09.2015 08:27:51

Panowie, w wyniku działania generatora otrzymuję jako wynik ciąg znaków wyglądający mniej więcej tak:

<pre>

[4, 7, 2, 7, 6, 8, 3, 6, 3, 9, 5, 6, [8]] 

</pre>

chciałbym jednak wyrzucić zbędne [] i , 

a jako wynik działania generatora zapisać tylko cyfry 4727683639568 do dalszej obróbki.

W pythonie ... przynajmniej teoretycznie służy do tego 'replace' ale w Odoo albo nie ma odpowiednich bibliotek - jakkolwiek to się tutaj zwie, albo jak zawsze wynika to z mojej niewiedzy :)

Jak najprościej oczyścić string i doprowadzić go do postaci bez zbędnych znaków ?

Użyłem: element = str.replace(element,(",",""))

w wyniku czego dostaję taki komunikat:

TypeError: descriptor 'replace' requires a 'str' object but received a 'list'

Mniemam, że ponieważ dostaję list to najpierw trzeba to w jakiś sposób przetworzyć do stringu ?

No i juz wiem ;) dzięki wydatnej pomocy .... mojej głowy ;)

<pre>
                numbers = self.eangen()
                numbers.append(self.calcheck(numbers))
                res = ''.join(map(str, numbers))# sposob na usunięcie okazal się być prostym, pozostało usunąć klamry :)
                record.write({'ean13': res})
</pre>

W wyniku tej operacji otrzymałem: 472768363956[8] a to juz jest nano sukces :)

Jak pozbyć się klamr z sumy kontrolnej ?

Ciekawe jest, że podczas wyliczania sumy i wyświetlania na ekranie konsoli pokazuje tylko cyfre. W chwili połączenia sumy z kodem dopisywane są klamry ;(

numbers       =      [7, 6, 6, 0, 1, 9, 6, 9, 0, 4, 4, 4]
checksum      =      0

po połączeniu: 058858806794[8]

...

    def eangen(self):
        numbers = []
        for x in range(12):
            numbers.append(randrange(10))
            print 'numbers       =     ',numbers
        return numbers

    @api.one    
    def calcheck(self,ean):
        assert len(ean) == 12, "12 numbers"
        sum_ = lambda x, y: int(x) + int(y)
        evensum = reduce(sum_,ean[::2])
        oddsum = reduce(sum_,ean[1::2])
        check = (10 - ((evensum + oddsum * 3) % 10)) % 10
        print 'checksum      =      ',check
        return check

....................................

 

Po prostu suma kontrolna też jest listą, która wypada stosownie i analogicznie przetworzyć.

Dariusz Żbikowski
na 11.09.2015, 07:34

Próbowałem czegoś takiego ale ponieważ byl z tym jakis problem zostawilem jak jest :) Generuje mi teraz poprostu barkod z klamrami :) Sprawdzę jeszcze raz :) Sugerowalem sie tym, że print wyświetla sama cyfrę bez klamr w przypadku sumy z kolei wygenerowany 12 cyfrowy kod wyświetlaw klamrach i z przecinkami :) Oczywiście przed join. Dziękuję za podpowiedź Darku.

Dr.One
na 11.09.2015, 10:00

Jednak nie, jak powinna wyglądać ta operacja ?

res = ''.join(map(str, check))
otrzymałem ... błąd: TypeError: argument 2 to map() must support iteration ??
Dr.One
na 11.09.2015, 10:10

Bądź na bieżąco

O tym forum

Forum dla profesjonalistów i entuzjastów systemu Odoo. Dyskusje, porady, opinie, komentarze. Przeczytaj wytyczne

Narzędzia do pytań

3 obserwujący

Statystyki

Spytał/a: 09.09.2015, 22:00
Oglądano: 1033 razy
Ostatnia aktualizacja: 11.09.2015, 10:10