clean.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #!/usr/bin/python
  2. import sys
  3. import bibtexparser
  4. import bibtexparser.bparser
  5. def remove_newlines(d):
  6. for key, value in d.items():
  7. d[key] = value.replace('\n', ' ')
  8. return d
  9. class AlignedWriter(bibtexparser.bwriter.BibTexWriter):
  10. def __init__(self):
  11. super(AlignedWriter, self).__init__()
  12. self.order_entries_by = None
  13. def _entry_to_bibtex(self, entry):
  14. bibtex = u'@{}{{{}'.format(entry['type'], entry['id'])
  15. for field in [i for i in sorted(entry) if i not in ['type', 'id']]:
  16. try:
  17. bibtex += u",\n {:<12}= {{{}}}".format(field, entry[field])
  18. except TypeError:
  19. raise TypeError("The field %s in entry %s must be a string" % (field, entry['id']))
  20. bibtex += u"\n}}\n{}".format(self.entry_separator)
  21. return bibtex.encode('UTF-8')
  22. def main():
  23. if len(sys.argv) < 2:
  24. sys.exit("Usage: clean.py file.bib")
  25. with open(sys.argv[1]) as f:
  26. parser = bibtexparser.bparser.BibTexParser()
  27. parser.customization = remove_newlines
  28. db = bibtexparser.loads(f.read(), parser)
  29. writer = AlignedWriter()
  30. print(bibtexparser.dumps(db, writer))
  31. if __name__ == '__main__':
  32. main()