Pybtex не распознает вход в bibtex
Я создаю базу данных публикаций, которая позволяет пользователям вводить записи bibtex, которые я затем анализирую и сохраняю в БД. Прямо сейчас у меня проблемы с разбором записей bibtex. Я пытаюсь использовать Pybtex для разбора. Во-первых, я не вижу, чтобы у pybtex была опция parse(input), только опция parse_file(). Вот чем я сейчас занимаюсь:
def convert_to_modelform(bibtexb):
parser = bibtex.Parser()
f = open('/tmp/bibtex.bib', 'w')
f.write(bibtexb)
f.close
bibdata = parser.parse_file('/tmp/bibtex.bib')
print bibdata
print len(bibdata.entries)
return bibtexb
/tmp/bibtex.bib содержит содержимое:
@article{article,
author = {Peter Adams},
title = {The title of the work},
journal = {The name of the journal},
year = 1993,
number = 2,
pages = {201-213},
month = 7,
note = {An optional note},
volume = 4
}
напечатать bibdata и print len (bibdata.entries) дают мне:
BibliographyData(entries=OrderedCaseInsensitiveDict({}), preamble=[])
0
Что мне здесь не хватает?
1 ответ
Решение
Чтобы разобрать строку, используйте StringIO в сочетании с parse_stream:
import pybtex.database.input.bibtex
from StringIO import StringIO
def bibtex_string_to_data(s):
parser = pybtex.database.input.bibtex.Parser()
return parser.parse_stream(StringIO(s))
print bibtex_string_to_data("""
@article{article,
author = {Peter Adams},
title = {The title of the work},
journal = {The name of the journal},
year = 1993,
number = 2,
pages = {201-213},
month = 7,
note = {An optional note},
volume = 4
}
""")
который дает (переформатирован для удобства чтения):
BibliographyData(entries=OrderedCaseInsensitiveDict({
'article': Entry(
'article',
fields={
'volume': '4',
'title': 'The title of the work',
'journal': 'The name of the journal',
'number': '2',
'month': '7',
'note': 'An optional note',
'year': '1993',
'pages': '201-213'},
persons={
'author': [Person(u'Adams, Peter')]})
}), preamble=[])