Skip to content

Instantly share code, notes, and snippets.

@Vbitz
Created February 21, 2019 04:11
Show Gist options
  • Save Vbitz/0437f49db40097017d87b4172bd4c9a0 to your computer and use it in GitHub Desktop.
Save Vbitz/0437f49db40097017d87b4172bd4c9a0 to your computer and use it in GitHub Desktop.
Extractor for Pathfinder Humble Bundle.
#!/usr/bin/env python3
import os
import re
import zipfile
fileMatch = re.compile(
r"(Pathfinder|Starfinder)(RoleplayingGame|CampaignSetting|Module|AdventurePath|Chronicles|Companion|PlayerCompanion|Playtest|CoreRulebook|SocietyScenario)(.*)(PDF|Bundle)(-SingleFile)?.zip")
mainPDFName = re.compile(r"(PZO(PSS)?[0-9\-]+B?E).pdf")
def get_main_pdf_name(names):
for name in names:
m = re.search(mainPDFName, name)
if m != None:
return m.group(1)
return None
def get_additional_names(names, main_name):
ret = []
for name in names:
if name.startswith(main_name + "-"):
ret += [name]
return ret
def extract_file(zip, filename, base_filename):
input = zip.open(filename, "r")
if "-" in filename:
filename = filename[(filename.find("-")):]
else:
filename = ".pdf"
print("[DEBUG ] Extracting %s to %s%s" % (filename, base_filename, filename, ))
output = open("%s%s" %
(base_filename, filename, ), "wb")
output.write(input.read())
def extract_files_in_path(path):
for file in os.listdir(path):
filename = os.path.join(path, file)
if not filename.endswith(".zip"):
continue
print("[INFO ] Extracting", filename)
m = re.search(fileMatch, filename)
if m == None:
print("[WARNING] This doesn't look like a Pazio filename.")
continue
game_name, file_type, file_name, download_type, _ = m.groups()
print("[DEBUG ]", game_name, file_type, file_name, download_type)
if game_name == "Starfinder":
file_type = "Starfinder"
file_name = "CoreRulebook"
if not os.path.exists(file_type):
os.mkdir(file_type)
zip = zipfile.ZipFile(filename)
names = zip.namelist()
print("[DEBUG ]", "Zip Names: ", names)
main_pdf_name = get_main_pdf_name(names)
if main_pdf_name == None:
print("[ERROR ] Could not determine main file")
continue
base_filename = "%s/%s" % (file_type, file_name, )
extract_file(zip, main_pdf_name + ".pdf", base_filename)
for add_file in get_additional_names(names, main_pdf_name):
extract_file(zip, add_file, base_filename)
downloads_dir = os.path.expanduser("~\\Downloads")
extract_files_in_path(".")
extract_files_in_path(downloads_dir)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment