Skip to content

Instantly share code, notes, and snippets.

@jirikuncar
Created June 27, 2014 11:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jirikuncar/46c6934900e8229a4a44 to your computer and use it in GitHub Desktop.
Save jirikuncar/46c6934900e8229a4a44 to your computer and use it in GitHub Desktop.
Export Frontiers csv to marc
import csv
import sys
import itertools
header = """<?xml version="1.0" encoding="UTF-8"?>
<collection xmlns="http://www.loc.gov/MARC21/slim">"""
footer = """</collection>"""
if __name__ == '__main__':
records = []
with open(sys.argv[1], 'rb') as csvfile:
reader = csv.reader(csvfile, delimiter=';')
keyfunc = lambda row: row[1]
reader = list(reader)[1:]
reader = sorted(reader, key=keyfunc)
for key, rows in itertools.groupby(reader, keyfunc):
rows = list(rows)
publication = """ <datafield tag="670" ind1=" " ind2=" ">
<subfield code="a">{row[3]}</subfield>
<subfield code="u">{row[2]}</subfield>
</datafield>"""
publications = '\n'.join(map(lambda row: publication.format(row=row), rows))
record = """<record>
{publications}
<datafield tag="100" ind1=" " ind2=" ">
<subfield code="a">{row[1]}</subfield>
</datafield>
<datafield tag="035" ind1=" " ind2=" ">
<subfield code="a">AUTHOR|($ORGANIZATION){row[0]}</subfield>
</datafield>
<datafield tag="980" ind1=" " ind2=" ">
<subfield code="a">AUTHORITY</subfield>
</datafield>
<datafield tag="980" ind1=" " ind2=" ">
<subfield code="a">AUTHOR</subfield>
</datafield>
</record>""".format(publications=publications, row=rows[0])
records.append(record)
print '\n'.join([header] + records + [footer])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment