Załóżmy, że mam jakieś StringIO
(od cStringIO
). Chcę odczytać bufor z nim aż do niektórych znaków/bajt spotyka, mówią „Z”, więc:szybki sposób na odczyt z StringIO, aż napotka jakiś bajt.
stringio = StringIO('ABCZ123')
buf = read_until(stringio, 'Z') # buf is now 'ABCZ'
# strinio.tell() is now 4, pointing after 'Z'
Jaki jest najszybszy sposób, aby zrobić to w Pythonie? Dziękuję
Bardzo dobre rozwiązanie! Rozwiązuje problem nadmiernego obciążania Pythona wywołaniami funkcji. Jedynym minusem jest to, że przechowujesz w pamięci nadmiarowy obiekt 'datalist'. Możliwe jest przepisanie tego kodu za pomocą generatora zamiast funkcji ('join' akceptuje iteratory), więc w pamięci nie będzie żadnych tymczasowych nadmiarowych obiektów. – ovgolovin
Ale wersja generatora okazuje się nieco wolniejsza: http://ideone.com/dQGe5 (Jeśli łańcuch jest duży (1 milion symboli) - wtedy wersja generatora jest nieco szybsza). – ovgolovin
Nawiasem mówiąc, dlaczego wybrałeś fragmenty symboli "256"? (dlaczego nie '512' lub' 1024'?) – ovgolovin