Pytam bazę danych i archiwizuję wyniki za pomocą Pythona, i próbuję skompresować dane podczas ich zapisywania w plikach dziennika. Mam jednak z tym pewne problemy.Jak działają kodeki kompresujące w Pythonie?
Mój kod wygląda następująco:
log_file = codecs.open(archive_file, 'w', 'bz2')
for id, f1, f2, f3 in cursor:
log_file.write('%s %s %s %s\n' % (id, f1 or 'NULL', f2 or 'NULL', f3))
Jednak mój plik wyjściowy ma rozmiar 1,409,780. Uruchomienie pliku bunzip2
powoduje, że plik o rozmiarze 943,634 i działający pod numerem bzip2
osiąga rozmiar 217,275. Innymi słowy, nieskompresowany plik jest znacznie mniejszy niż plik skompresowany przy użyciu kodeka bzip Pythona. Czy istnieje sposób naprawienia tego, inny niż uruchamianie bzip2
w wierszu polecenia?
Próbowałem kodeku gzip Pythona (zmieniając linię na codecs.open(archive_file, 'a+', 'zip')
), aby sprawdzić, czy naprawił problem. Nadal dostaję duże pliki, ale dostaję także błąd gzip: archive_file: not in gzip format
podczas próby dekompresji pliku. Co tam się dzieje?
EDIT: I pierwotnie miał plik otwierany w trybie dopisywania, nie tryb zapisu. Chociaż może to być problem, ale nie musi, pytanie pozostaje nadal aktualne, jeśli plik jest otwarty w trybie "w".
Dlaczego otwierasz plik do dodania? – JoshD
Powoduje to stopniowe przycinanie rekordów z bazy danych i zapisywanie ich w pliku archiwum, dzięki czemu plik archiwum stopniowo rośnie, aż zostanie skopiowany z samego komputera. –