Symulowanie dużo wyjścia z niektórych analizy sieci, wymieniając krawędź na linię, co powoduje dziesiątki gigabajtów, rozciągając granice moich zasobów (niedopowiedzi). Jak sobie radzę z wartościami numerycznymi, przyszło mi do mnie, że mogę być mądrzejszy niż użycie domyślnych PY3K. To znaczy. Niektóre inne kodowanie znaków może zaoszczędzić mi całkiem trochę miejsca, jeśli mam tylko cyfry (i przestrzeń i sporadyczną kropkę dziesiętną). Jak już jestem ograniczony, mogę nawet zaoszczędzić na zakończeniach linii (nie posiadać standardowego duplikatu CRLF systemu Windows). Jakie jest najlepsze praktyki?

Przykładowa linia byłaby taka:

62233 242344 0.42442423.

(W przypadku ostatniego numeru nie jest ustawione precyzyjnie, obniżyłem go z powrotem do trzech niezerowych cyfr.)

Gdy będę musiał przeczytać w pliku tekstowym z innym oprogramowaniem (Statu, właściwie), nie mogę prowadzić danych w dowolnym binarnie, choć nie widzę powodu, dla którego Stati przeczytałby tylko tekst UTF-8. Albo po prostu mówisz, że unikanie UTF-8 ledwo zaoszczędza mi cokolwiek?

Myślę, że kompresja nie działa dla mnie, ponieważ piszę linię tekstową według linii i byłoby wspaniale ograniczyć rozmiar wyjścia nawet w tym czasie. Być może łatwo pomyliłem, jak działa kompresyjne, ale myślałem, że może uratować mi przestrzeń po wygenerowaniu pliku, ale mój problem polega na tym, że mój kod zawiesza się już tak, jak nazywam plik tekstowy (linia linia liniowa).

Dziękujemy za wszystkie pomysły i wyjaśniające pytania!

2
László 28 wrzesień 2011, 00:36

4 odpowiedzi

Najlepsza odpowiedź

Możesz użyć Zlib lub gzip, aby skompresować dane podczas generowania go. Nie musisz w ogóle zmieniać formatu, kompresja dostosuje się do znaków i sekwencji, których najbardziej używasz, aby utworzyć optymalny rozmiar pliku.

6
Mark Ransom 27 wrzesień 2011, 20:44

Unikaj całkowicie kodowania znaków i zapisać dane w formacie binarnym. Zobacz Pythona's struct. ASCII-enkoded wartość tacy jak 4 mld zajmuje 10 bajtów, ale pasuje do 4-bajtowego całkowitego. Istnieje wiele obrad do niestandardowego formatu binarnego (trudno jest ręcznie debugować lub sprawdzić z innymi narzędziami itp.)

3
P.T. 27 wrzesień 2011, 20:45

Zrobiłem na to studia. Sprytne kodowanie nie ma znaczenia, gdy zastosujesz kompresję. Nawet jeśli używasz niektórych kodowania binarnego, wydaje się, że zawierają tę samą entropię i kończą się w podobny rozmiar po kompresji.

Moc gzip

Tak, istnieją biblioteka Pythona pozwala na strumieniu wyjścia i automatycznie kompresować go.

Wstratowany kodowanie ma przestrzeń. Cięcie precyzji pomaga.

2
Wai Yip Tung 27 wrzesień 2011, 21:28

Nie znam możliwości wprowadzania danych w Statu, a szybkie wyszukiwanie ujawnia, że wspomniane możliwości są opisane w podręczniku użytkownika, który wydaje się być dostępny tylko na śmiertelnych kopiach. Więc nie wiem, czy moja sugestia jest wykonalna.

Natychmiastowa oszczędność połowy rozmiaru byłoby, gdyby użyłeś 4-bitów na znak. Masz alfabet od 0 do 9, okres (może) minus znak, przestrzeń i nowa linia, które są 14 znaków doskonale dopasowanymi w 2 ** 4 == 16 slotów.

Jeśli można to wykorzystać w Statu, mogę pomóc więcej z sugestiami szybkich konwersji.

0
tzot 15 październik 2011, 08:49