forked from MinIenM/BAG-Extract
-
Notifications
You must be signed in to change notification settings - Fork 0
/
libUnzip.py
75 lines (66 loc) · 2.77 KB
/
libUnzip.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#------------------------------------------------------------------------------
# Naam: libUnzip.py
# Omschrijving: Generieke functies voor het uitpakken van gecomprimeerde
# BAG Extract bestanden
# Auteur: Matthijs van der Deijl
#
# Versie: 1.4
# Datum: 21 januari 2010
#
# Ministerie van Volkshuisvesting, Ruimtelijke Ordening en Milieubeheer
#------------------------------------------------------------------------------
import sys, zipfile, os, os.path, glob
from libLog import *
def rmgeneric(path, __func__):
try:
__func__(path)
except OSError, (errno, strerror):
pass
def removeall(path):
if not os.path.isdir(path):
return
files = os.listdir(path)
for x in files:
fullpath=os.path.join(path, x)
if os.path.isfile(fullpath):
f=os.remove
rmgeneric(fullpath, f)
elif os.path.isdir(fullpath):
removeall(fullpath)
f=os.rmdir
rmgeneric(fullpath, f)
def unzip_file_into_dir(zipfileNaam, doelDirectory):
# Bepaal directory waarin zipbestand wordt uitgepakt.
(zipPad, zipNaam) = os.path.split(zipfileNaam)
(zipNaamKort, zipNaamExtensie) = os.path.splitext(zipNaam)
extractDirectory = os.path.join(doelDirectory, zipNaamKort)
log(extractDirectory)
# Maak directory waarin inhoud van zipbestand wordt opgeslagen.
if os.path.exists(extractDirectory):
removeall(extractDirectory)
os.rmdir(extractDirectory)
if os.path.exists(extractDirectory):
log("*** FOUT *** Verwijder eerst %s om door te gaan." %extractDirectory)
return False
try:
os.mkdir(extractDirectory, 0777)
except:
log("*** FOUT *** Kan directory %s niet maken." %extractDirectory)
return False
# Open het zipbestand en pak het uit
geopendeZipfile = zipfile.ZipFile(zipfileNaam)
for zipOnderdeelNaam in geopendeZipfile.namelist():
if zipOnderdeelNaam.endswith('/'):
os.mkdir(os.path.join(extractDirectory, zipOnderdeelNaam), 0777)
else:
zipOnderdeelFile = open(os.path.join(extractDirectory, zipOnderdeelNaam), 'wb')
zipOnderdeelFile.write(geopendeZipfile.read(zipOnderdeelNaam))
zipOnderdeelFile.close()
# Doorloop de directory met de opgeslagen bestanden en pak elk
# opgeslagen zip-bestand op zijn beurt uit.
for fileNaam in os.listdir(extractDirectory):
filePad = os.path.join(extractDirectory, fileNaam)
(fileNaamKort, fileNaamExtensie) = os.path.splitext(filePad)
if fileNaamExtensie.lower() == ".zip":
unzip_file_into_dir(filePad, extractDirectory)
return True