使用Python将BibTex文件转换为数据库条目

17 投票
5 回答
10298 浏览
提问于 2025-04-17 12:48

我有一个bibTex文件,需要把里面的作者、标题、期刊等信息添加到一个MySQL数据库的表格里(这个表格是我自己设计的)。

经过一些初步的研究,我发现有一个叫Bibutils的工具,可以把bib文件转换成xml格式。我的初步想法是先把它转换成XML,然后再用Python来解析这个XML,把数据放到一个字典里。

我主要有两个问题:

  1. 有没有更好的方法来进行这个转换?
  2. 有没有直接解析bibTex的库,可以让我在Python中直接获取这些字段?

(我找到过bibliography.parsing这个库,它内部使用了bibutils,但文档不多,我觉得用起来挺困难的)。

5 个回答

3

你还可以使用Python的BibtexParser库:https://github.com/sciunto/python-bibtexparser

文档地址:https://bibtexparser.readthedocs.org

这个库使用起来非常简单(我在实际项目中也用过)。

顺便说一下,我不是这个库的开发者。

5

我的解决办法是使用bibtexparser把相关字段导出到一个csv文件里;

import bibtexparser
import pandas as pd

with open("../../bib/small.bib") as bibtex_file:
    bib_database = bibtexparser.load(bibtex_file)
    
df = pd.DataFrame(bib_database.entries)
selection = df[['doi', 'number']]
selection.to_csv('temp.csv', index=False)

然后把这个csv文件写入数据库的一个表中,最后删除这个temp.csv文件。

这样可以避免我在使用pybtex时遇到的一些麻烦,具体可以参考我找到的这个链接

26

这是个老问题,不过我现在也在用 Pybtex 这个库来做同样的事情。这个库里面有一个内置的解析器:

from pybtex.database.input import bibtex

#open a bibtex file
parser = bibtex.Parser()
bibdata = parser.parse_file("myrefs.bib")

#loop through the individual references
for bib_id in bibdata.entries:
    b = bibdata.entries[bib_id].fields
    try:
        # change these lines to create a SQL insert
        print b["title"]
        print b["journal"]
        print b["year"]
        #deal with multiple authors
        for author in bibdata.entries[bib_id].persons["author"]:
            print author.first(), author.last()
    # field may not exist for a reference
    except(KeyError):
        continue

撰写回答