Mam aplikację, która generuje duże pliki dziennika> 500 MB.Czy można wyszukiwać i mówić pracę z kodowanymi w UTF-8 dokumentami w Pythonie?
Napisałem niektóre narzędzia w Pythonie, które pozwalają mi szybko przejrzeć plik dziennika i znaleźć interesujące go dane. Ale teraz otrzymuję zestawy danych, w których plik jest zbyt duży, aby załadować go do pamięci.
W ten sposób chcę zeskanować dokument raz, zbudować indeks, a następnie załadować tylko część dokumentu do pamięci, którą chcę obejrzeć na raz.
Działa to dla mnie, gdy otwieram "plik", odczytuję go po jednej linii i zapisuję offset z pliku file.tell(). Mogę następnie wrócić do tej sekcji pliku później z file.seek (offset, 0).
Mój problem polega na tym, że mogę mieć kodowanie UTF-8 w plikach dziennika, więc muszę je otworzyć za pomocą modułu koderów-dekoderów (codecs.open(<filename>, 'r', 'utf-8')
). Z otrzymanym obiektem mogę zadzwonić do wyszukiwania i powiedzieć, ale nie pasują do siebie.
Zakładam, że kodeki muszą trochę buforować, czy może zwraca liczby znaków zamiast bajtów z tell?
Czy istnieje sposób obejścia tego?
Ściśle mówiąc, UTF-8 ma tylko jedną możliwą kolejność bajtów i dlatego nie ma zastosowania do znaku kolejności bajtów, więc znacznik kolejności bajtów jest nieprawidłowy dla UTF-8. Mimo to niektóre kodery UTF-8 niepoprawnie poprzedzają znak kolejności bajtów, a niektóre dekodery UTF-8 akceptują dane wejściowe zakodowane za pomocą znaku kolejności bajtu. – yfeldblum
To prawda, że w UTF-8 nie ma kolejności bajtów. Jednak znak kolejności bajtów jest często używany w celu wskazania, że plik jest kodowany w UTF-8; Nie nazwałbym tego użycia "niepoprawnym". – intgr