Forum Discussion
bojanvelevski
4 years agoValued Contributor
Hey @peter,
Yes, I think it’s possible. In my case I was extracting only the csv files out of zip files but it should be similar. Check the Python script I was using in a Script snap, and try to adjust it per your needs. Let us know if you have any difficulties.
from com.snaplogic.scripting.language import ScriptHook
import zipfile
import io
class TransformScript(ScriptHook):
def __init__(self, input, output, error, log):
self.input = input
self.output = output
self.error = error
self.log = log
# The "execute()" method is called once when the pipeline is started
# and allowed to process its inputs or just send data to its outputs.
def execute(self):
self.log.info("Executing Transform script")
while self.input.hasNext():
try:
# Read the next input document, store it in a new dictionary, and write this as an output document.
inDoc = self.input.next()
content = inDoc.get('content')
files = zipfile.ZipFile(io.BytesIO(content))
for info in files.infolist():
if files.read(info).find("xml version=") != -1:
filecontent = files.read(info)
outDoc = {
'content' : filecontent,
'original' : inDoc
}
self.output.write(inDoc, outDoc)
except Exception as e:
errDoc = {
'error' : str(e)
}
self.log.error("Error in python script")
self.error.write(errDoc)
self.log.info("Script executed")
# The "cleanup()" method is called after the snap has exited the execute() method
def cleanup(self):
self.log.info("Cleaning up")
# The Script Snap will look for a ScriptHook object in the "hook"
# variable. The snap will then call the hook's "execute" method.
hook = TransformScript(input, output, error, log)
I hope you’ll find this helpful,
Bojan