我有數百個CSV文件壓縮。這非常棒,因爲它們佔用的空間非常小,但在使用它們的時候,我必須在我的HD上留出一些空間,並在我可以處理之前解壓縮它們。我想知道是否可以用python(或者linux命令行)在讀取文件時解壓縮一個文件。換句話說,我想打開一個zip文件,開始解壓縮文件,並在我們去時處理文件。Python/Linux - 讀取文件時解壓縮文件
因此,我的驅動器上不需要額外的空間。任何想法或建議?
我有數百個CSV文件壓縮。這非常棒,因爲它們佔用的空間非常小,但在使用它們的時候,我必須在我的HD上留出一些空間,並在我可以處理之前解壓縮它們。我想知道是否可以用python(或者linux命令行)在讀取文件時解壓縮一個文件。換句話說,我想打開一個zip文件,開始解壓縮文件,並在我們去時處理文件。Python/Linux - 讀取文件時解壓縮文件
因此,我的驅動器上不需要額外的空間。任何想法或建議?
自1.6版以來,Python提供了模塊zipfile
來處理這種情況。一個例子用法:
import csv
import zipfile
with zipfile.ZipFile('myarchive.zip') as archive:
with archive.open('the_zipped_file.csv') as fin:
reader = csv.reader(fin, ...)
for record in reader:
# process record.
注意,在python3事情變得有點複雜,因爲archive.open
返回的類文件對象產生字節,而csv.reader
希望字符串。您可以使用給定的編碼寫一個簡單的類,它從字節字符串轉換:
class EncodingConverter:
def __init__(self, fobj, encoding):
self._iter_fobj = iter(fobj)
self._encoding = encoding
def __iter__(self):
return self
def __next__(self):
return next(self._iter_fobj).decode(self._encoding)
,並用它喜歡:
import csv
import zipfile
with zipfile.ZipFile('myarchive.zip') as archive:
with archive.open('the_zipped_file.csv') as fin:
reader = csv.reader(EncodingConverter(fin, 'utf-8'), ...)
for record in reader:
# process record.
謝謝!它有幫助 – user1214120
雖然很有可能在 Python中打開ZIP文件,但也可以使用文件系統擴展來透明地處理此操作。如果這是可取的或不取決於各種因素,包括系統訪問和解決方案可移植性。
見Fuse-Zip:
帶保險絲-ZIP你真的能處理ZIP壓縮文件爲真正的目錄工作。與KIO或Gnome VFS不同,它可以在任何應用程序中使用,無需修改。
或者AVFS: A Virtual File System:
動靜脈瘻是一個系統,使所有的程序看看裏面的gzip,焦油,ZIP等文件或查看遠程(FTP,HTTP,DAV等)的文件,而無需重新編譯程序。
請注意,這些解決方案是系統特定的,並依賴於FUSE。 Windows可能有類似的透明解決方案 - 但這需要對特定系統進行另一項調查。
我得到了同樣的問題,因爲這傢伙:HTTP:// stackoverflow.com/questions/3170625/unzip-file-while-reading-it,但在Linux上 – user1214120
http://stackoverflow.com/questions/2018512/reading-tar-file-contents-without-untarring-it-in- python-script – seth
看看[zipfile模塊](http://docs.python.org/2/library/zipfile),我想這可能是你正在尋找的東西。 –