Skip to content

Instantly share code, notes, and snippets.

@goodtune
Created August 24, 2012 06:32
Show Gist options
  • Save goodtune/3446681 to your computer and use it in GitHub Desktop.
Save goodtune/3446681 to your computer and use it in GitHub Desktop.
Script to convert LDIF input to CSV output - reads from stdin, writes to stdout
import csv
import ldif
import sys
def flatten(d, bar='|'):
"""
Take a regular dictionary, and flatten the value if it's a list.
"""
diff = {}
for k, v in d.items():
if not isinstance(v, basestring):
diff[k] = bar.join(v)
d.update(diff)
return d
class MyParser(ldif.LDIFParser):
def __init__(self, *args, **kwargs):
ldif.LDIFParser.__init__(self, *args, **kwargs)
self.attributes = set()
self.records = []
def handle(self, dn, entry):
self.attributes.update(entry.keys())
self.records.append(entry)
def csv(self, fp=sys.stdout):
writer = csv.DictWriter(fp, fieldnames=self.attributes)
try:
writer.writeheader()
except AttributeError:
fields = sorted(self.attributes)
writer.writerow(dict(zip(fields, fields)))
for record in self.records:
writer.writerow(flatten(record))
p = MyParser(sys.stdin)
p.parse()
p.csv()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment