天天看點

Python壓縮/解壓gzip大檔案

Code tells all:

<code>#encoding=utf-8</code>

<code>#author: walker</code>

<code>#date: 2015-10-26</code>

<code>#summary: 測試gzip壓縮/解壓檔案</code>

<code>import</code> <code>gzip</code>

<code>  </code> 

<code>BufSize </code><code>=</code> <code>1024</code><code>*</code><code>8</code>  

<code>    </code> 

<code>def</code> <code>gZipFile(src, dst):</code>

<code>    </code><code>fin </code><code>=</code> <code>open</code><code>(src, </code><code>'rb'</code><code>)</code>

<code>    </code><code>fout </code><code>=</code> <code>gzip.</code><code>open</code><code>(dst, </code><code>'wb'</code><code>)</code>

<code>    </code><code>in2out(fin, fout)</code>

<code>def</code> <code>gunZipFile(gzFile, dst):</code>

<code>    </code><code>fin </code><code>=</code> <code>gzip.</code><code>open</code><code>(gzFile, </code><code>'rb'</code><code>)</code>

<code>    </code><code>fout </code><code>=</code> <code>open</code><code>(dst, </code><code>'wb'</code><code>)</code>

<code>def</code> <code>in2out(fin, fout):</code>

<code>    </code><code>while</code> <code>True</code><code>:</code>

<code>        </code><code>buf </code><code>=</code> <code>fin.read(BufSize)</code>

<code>        </code><code>if</code> <code>len</code><code>(buf) &lt; </code><code>1</code><code>:</code>

<code>            </code><code>break</code>

<code>        </code><code>fout.write(buf)</code>

<code>        </code> 

<code>    </code><code>fin.close()</code>

<code>    </code><code>fout.close()</code>

<code>if</code> <code>__name__ </code><code>=</code><code>=</code> <code>'__main__'</code><code>:</code>

<code>    </code><code>src </code><code>=</code> <code>r</code><code>'D:\tmp\src.txt'</code>

<code>    </code><code>dst </code><code>=</code> <code>r</code><code>'D:\tmp\src.txt.gz'</code>

<code>    </code><code>ori </code><code>=</code> <code>r</code><code>'D:\tmp\ori.txt'</code>

<code>    </code><code>gZipFile(src, dst)</code>

<code>    </code><code>print</code><code>(</code><code>'gZipFile over!'</code><code>)</code>

<code>    </code><code>gunZipFile(dst, ori)</code>

<code>    </code><code>print</code><code>(</code><code>'gunZipFile over!'</code><code>)</code>

也可以簡單地封裝成一個類:

<code>class</code> <code>GZipTool:</code>

<code>    </code><code>def</code> <code>__init__(</code><code>self</code><code>, bufSize):</code>

<code>        </code><code>self</code><code>.bufSize </code><code>=</code> <code>bufSize</code>

<code>        </code><code>self</code><code>.fin </code><code>=</code> <code>None</code>

<code>        </code><code>self</code><code>.fout </code><code>=</code> <code>None</code>

<code>    </code><code>def</code> <code>compress(</code><code>self</code><code>, src, dst):</code>

<code>        </code><code>self</code><code>.fin </code><code>=</code> <code>open</code><code>(src, </code><code>'rb'</code><code>)</code>

<code>        </code><code>self</code><code>.fout </code><code>=</code> <code>gzip.</code><code>open</code><code>(dst, </code><code>'wb'</code><code>)</code>

<code>        </code><code>self</code><code>.__in2out()</code>

<code>    </code><code>def</code> <code>decompress(</code><code>self</code><code>, gzFile, dst):</code>

<code>        </code><code>self</code><code>.fin </code><code>=</code> <code>gzip.</code><code>open</code><code>(gzFile, </code><code>'rb'</code><code>)</code>

<code>        </code><code>self</code><code>.fout </code><code>=</code> <code>open</code><code>(dst, </code><code>'wb'</code><code>)</code>

<code>    </code><code>def</code> <code>__in2out(</code><code>self</code><code>,):</code>

<code>        </code><code>while</code> <code>True</code><code>:</code>

<code>            </code><code>buf </code><code>=</code> <code>self</code><code>.fin.read(</code><code>self</code><code>.bufSize)</code>

<code>            </code><code>if</code> <code>len</code><code>(buf) &lt; </code><code>1</code><code>:</code>

<code>                </code><code>break</code>

<code>            </code><code>self</code><code>.fout.write(buf)</code>

<code>            </code> 

<code>        </code><code>self</code><code>.fin.close()</code>

<code>        </code><code>self</code><code>.fout.close()</code>

相關閱讀:

*** walker ***

本文轉自walker snapshot部落格51CTO部落格,原文連結http://blog.51cto.com/walkerqt/1706430如需轉載請自行聯系原作者

RQSLT