Sto interrogando un database e archiviando i risultati usando Python, e sto provando a comprimere i dati mentre li scrivo nei file di registro. Ho qualche problema con questo, però.Come funzionano i codec di compressione in Python?
Il mio codice simile a questo:
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))
Tuttavia, il mio file di output ha una dimensione di 1.409.780. L'esecuzione di bunzip2
sul file ha come risultato un file con una dimensione di 943.634 e l'esecuzione di bzip2
su tale risultato ha una dimensione di 217.275. In altre parole, il file non compresso è significativamente più piccolo del file compresso usando il codec bzip di Python. C'è un modo per risolvere questo problema, oltre a eseguire bzip2
nella riga di comando?
Ho provato il codec gzip di Python (modificando la linea su codecs.open(archive_file, 'a+', 'zip')
) per vedere se ha risolto il problema. Ottengo ancora file di grandi dimensioni, ma ho anche un errore gzip: archive_file: not in gzip format
quando provo a decomprimere il file. Cosa sta succedendo lì?
EDIT: Originariamente ho avuto il file aperto in modalità di aggiunta, non in modalità scrivere. Anche se questo può o non può essere un problema, la domanda rimane valida se il file è aperto in modalità 'w'.
Perché stai aprendo il file per l'aggiunta? – JoshD
Questo taglia gradualmente i record dal database e li salva in un file di archivio, quindi il file di archivio cresce gradualmente finché non viene copiato dalla macchina stessa. –