Witamy!
Forum dla profesjonalistów i entuzjastów systemu Odoo. Dyskusje, porady, opinie, komentarze.
Czyszczenie "stringów" ? ............ nie chodzi o bieliznę [Zamknięte]
- Pytanie został zamknięty z powodu: niezwiązane z tematem lub nieaktualne
przezPanowie, 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
....................................
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.
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 ??
Bądź na bieżąco
O tym forum
Narzędzia do pytań
Statystyki
Spytał/a: 09.09.2015, 22:00 |
Oglądano: 1033 razy |
Ostatnia aktualizacja: 11.09.2015, 10:10 |
Po prostu suma kontrolna też jest listą, która wypada stosownie i analogicznie przetworzyć.