Source code for dnppy.convert.extract_archive
__author__ = 'jwely'
import os
import tarfile
import gzip
import zipfile
from dnppy import core
__all__ = ["extract_archive"]
[docs]def extract_archive(filepaths, delete_originals = False):
"""
Input list of filepaths OR a directory path with compressed
files in it. Attempts to decompress the following formats
Support formats include ``.tar.gz``, ``.tar``, ``.gz``, ``.zip``.
:param filepaths: list of filepaths to archives for extraction
:param delete_originals: Set to "True" if archives may be deleted after
their contents is successful extracted.
"""
filepaths = core.enf_filelist(filepaths)
for filepath in filepaths:
head,tail = os.path.split(filepath)
if filepath.endswith(".tar.gz"):
with tarfile.open(filepath, 'r:gz') as tfile:
outdir = os.path.join(head, tail.replace(".tar.gz",""))
tfile.extractall(outdir)
# gzip only compresses single files
elif filepath.endswith(".gz"):
with gzip.open(filepath, 'rb') as gzfile:
outfile = os.path.join(head, tail.replace(".gz",""))
content = gzfile.read()
with open(outfile, 'wb') as of:
of.write(content)
elif filepath.endswith(".tar"):
with tarfile.open(filepath, 'r') as tfile:
outdir = os.path.join(head, tail.replace(".tar",""))
tfile.extractall(outdir)
elif filepath.endswith(".zip"):
with zipfile.ZipFile(filepath, "r") as zipf:
outdir = os.path.join(head, tail.replace(".zip",""))
zipf.extractall(outdir)
else: return
print("Extracted {0}".format(filepath))
if delete_originals:
os.remove(filepath)
return
#testing area
if __name__ == "__main__":
formats = [r"C:\Users\jwely\Desktop\troubleshooting\zip_tests\MOD09A1.A2015033.h11v05.005.2015044233105_1_tar.tar",
r"C:\Users\jwely\Desktop\troubleshooting\zip_tests\MOD09A1.A2015033.h11v05.005.2015044233105_1_targz.tar.gz",
r"C:\Users\jwely\Desktop\troubleshooting\zip_tests\MOD09A1.A2015033.h11v05.005.2015044233105_1.tif.gz",
r"C:\Users\jwely\Desktop\troubleshooting\zip_tests\MOD09A1.A2015033.h11v05.005.2015044233105_1_zip.zip"]
for format in formats:
extract_archive(format)