From 9ea70372a9acdec319051f406510cf88aa7317ae Mon Sep 17 00:00:00 2001 From: Armin Schoisswohl Date: Fri, 3 Aug 2018 09:45:23 +0200 Subject: [PATCH 1/2] mporters changed to support import of bzip2 and gzip compressed files --- pystdf/Importer.py | 55 ++++++++++++++++++++++++++++++++++++---------- 1 file changed, 43 insertions(+), 12 deletions(-) diff --git a/pystdf/Importer.py b/pystdf/Importer.py index 8a7bc1e..26763ae 100644 --- a/pystdf/Importer.py +++ b/pystdf/Importer.py @@ -23,6 +23,21 @@ import pandas as pd from pystdf.IO import Parser from pystdf.Writers import TextWriter +import re + +try: + import gzip + have_gzip = True +except ImportError: + have_gzip = False +try: + import bz2 + have_bz2 = True +except ImportError: + have_bz2 = False + +gzPattern = re.compile('\.g?z', re.I) +bz2Pattern = re.compile('\.bz2', re.I) class MemoryWriter: def __init__(self): @@ -34,24 +49,40 @@ def write(self,line): def flush(self): pass # Do nothing +def OpenSTDFparser(fname): + reopen_fn = None + if gzPattern.search(fname): + if not have_gzip: + raise RuntimeError('gzip is not supported on this system') + reopen_fn = lambda: gzip.open(fname, 'rb') + f = reopen_fn() + elif bz2Pattern.search(fname): + if not have_bz2: + raise RuntimeError('bz2 is not supported on this system') + reopen_fn = lambda: bz2.BZ2File(fname, 'rb') + f = reopen_fn() + else: + f = open(fname, 'rb') + p = Parser(inp=f, reopen_fn=reopen_fn) + return p, f + def ImportSTDF(fname): - with open(fname,'rb') as fin: - p = Parser(inp=fin) - storage = MemoryWriter() - p.addSink(storage) - p.parse() + p, f = OpenSTDFparser(fname) + storage = MemoryWriter() + p.addSink(storage) + p.parse() + f.close() return storage.data def STDF2Text(fname,delimiter='|'): """ Convert STDF to a list of text representation """ - with open(fname,'rb') as fin: - p = Parser(inp=fin) - storage = MemoryWriter() - p.addSink(TextWriter(storage,delimiter=delimiter)) - p.parse() - return storage.data - return None + p, f = OpenSTDFparser(fname) + storage = MemoryWriter() + p.addSink(TextWriter(storage,delimiter=delimiter)) + p.parse() + f.close() + return storage.data def STDF2Dict(fname): """ Convert STDF to a list of dictionary objects From db447911d3c551285f8f580a9d75911063949e85 Mon Sep 17 00:00:00 2001 From: Armin Schoisswohl Date: Thu, 22 Aug 2019 11:28:39 +0200 Subject: [PATCH 2/2] anged .gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index abdd986..a9eb563 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ *.swo build/ docs/build +MANIFEST +dist/