-
Notifications
You must be signed in to change notification settings - Fork 2
/
zip.py
68 lines (59 loc) · 2.21 KB
/
zip.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
#!/usr/bin/python3
"""
Module to manage information from the zip files for the Dungeon Pages Year Long Adventure.
"""
import zipfile
import re
import pprint
def adventure_zip_file_info(adventurefile):
"""
Get the list of files in an Year Long Adventure zip
return a dictionary with the information.
sample dictionary entry in dungeon:
'DungeonPages_YLA_WK_08_KreteKreeg_Stormshield_022323.pdf':
{
'adventurer': 'KreteKreeg',
'adventurers name': 'Krete '
'Kreeg',
location': 'Stormshield',
location name': 'Stormshield'
},
"""
with zipfile.ZipFile(adventurefile, mode="r") as archive:
file_list = archive.namelist()
# items = archive.infolist()
dungeon = {}
for file in file_list:
# ignore the zip artefacts of being created on OSX
if file.startswith("__MACOSX"):
continue
# only get the weekly adventure files, ignore the rules and addendum files
if "YLA_WK" in file:
# strip off the extension, then break up the filename
# the naming isn't consistent, so we need to work backwards
namearray = file.split(".")[0].split("_")
adventurer = namearray[-3]
location = namearray[-2]
# the filename has Camel Case adventurer names and locations,
# so make them human readable
# thanks to stack exchange for the regex- https://stackoverflow.com/a/2279177
adventurer_readable = re.sub(r"([A-Z])", r" \1", adventurer).lstrip()
location_readable = re.sub(r"([A-Z])", r" \1", location).lstrip()
# create a dictionary entry for each file
dungeon[file] = {
"adventurer": adventurer,
"adventurers name": adventurer_readable,
"location": location,
"location name": location_readable,
}
return dungeon
def main():
"""
for future unit tests, the ability to run this module standalone
"""
adventure = "Year-long Adventure_071423.zip"
printer = pprint.PrettyPrinter(indent=4)
dungeon = adventure_zip_file_info(adventure)
printer.pprint(dungeon)
if __name__ == "__main__":
main()