Wpis z mikrobloga

Jak z #zbar w #python otrzymać samą zdekodowaną zawartość? Obecnie dostaje coś takiego:

Decoded(data=b'PSC:00000074', type='QRCODE', rect=Rect(left=60, top=63, width=120, height=120), polygon=[Point(x=60, y=73), Point(x=70, y=183), Point(x=180, y=173), Point(x=169, y=63)

a chciałbym samo "PSC:00000074". Istnieje jakiś sensowny sposób niż oddzielanie po apostrofach i wybieranie [0]?
  • 7
@NewEpisode: nie wiem czy dobrze zrozumiałem, ale nie konwertuj/serializuj wynikowego obiektu na string, ale po prostu wyciągnij z wyniku dekodowania wartość pola data wynikowego obiektu poprzez:

wynik_dekodowania = decode(...)
dane = wynik_dekodowania.data
(Nie znam zbar)

Jeżeli to jest to, to w takim razie idea obiektów/OOP u ciebie leży oraz musisz doczytać czym jest metoda __str__ oraz __repr__ w Pythonie.
@NewEpisode: ciągle źle.

Nie rób:

wynik_dekodowania = str(zbar_decode(...))
nie rób:

wynik_dekodowania = repr(zbar_decode(...))
nie rób:

wynik_dekodowania = "" + zbar_decode(...)
nie rób:

wynik_dekodowania = "{}".format(zbar_decode(...))
Tylko wynikiem wywołania zbar_decode(...) jest pełnoprawny obiekt, który ma pola (zmienne) i możesz wyciągnąć z tych pól dane.

Kolejna rzecz, to masz tam byte-stringa jako typ wynik_dekodowania.data i aby to przekształcić w tekst, to musisz zaaplikować kodowanie tekstu - QrCode ma chyba UTF-8 chyba z domysłu:
@patrolez: Niestety nie ogarniam na tyle pythona żeby aż tak zrozumieć co napisałeś. Obecnie wykryte mam np 4x QR i output mam na konsoli taki:

[Decoded(data=b'PSC:0000001A', type='QRCODE', rect=Rect(left=12633, top=12161, width=529, height=750), polygon=[Point(x=12633, y=12911), Point(x=13159, y=12905), Point(x=13162, y=12161), Point(x=12636, y=12161)]), Decoded(data=b'PSC:00000028', type='QRCODE', rect=Rect(left=12201, top=14187, width=527, height=754), polygon=[Point(x=12201, y=14201), Point(x=12205, y=14941), Point(x=12728, y=14931), Point(x=12722, y=14187)]), Decoded(data=b'PSC:00000021', type='QRCODE', rect=Rect(left=12212, top=13182, width=527, height=763), polygon=[Point(x=12212, y=13945), Point(x=12739, y=13917), Point(x=12738, y=13182), Point(x=12214, y=13182)]), Decoded(data=b'PSC:0000003L', type='QRCODE', rect=Rect(left=11815, top=11331,
@NewEpisode:
zmienna a to lista obiektów typu Decoded
Czyli:

wynikowe_stringi = [x.data.decode('utf-8') for x in a]
[print(x) for x in wynikowe_stringi]
Zamiast całego bloku if a:, a uzyskasz co potrzebujesz.