var*_*unr 15 python mysql bibtex
给定一个bibTex文件,我需要将相应的字段(作者,标题,日记等)添加到MySQL数据库中的表中(使用自定义模式).
在做了一些初步研究之后,我发现存在可以用于将bib文件转换为xml的Bibutils.我最初的想法是将其转换为XML,然后在python中解析XML以填充字典.
我的主要问题是:
(我确实找到了bibliography.parsing,它在内部使用了bibutils,但是没有太多文档,我觉得很难让它工作).
pau*_*usm 23
老问题,但我现在正在使用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
Run Code Online (Sandbox Code Playgroud)
小智 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)
Run Code Online (Sandbox Code Playgroud)
然后将csv写入数据库中的表中,并删除.csv文件temp.csv。
这避免了我发现的pybtex 的一些并发症。
转换为 XML 是个好主意。
XML 作为一种独立于应用程序的数据格式存在,因此您可以使用现成的库对其进行解析;使用它作为中介没有特别的缺点。事实上,您通常可以将 XML 导入数据库,甚至无需使用 Python 之类的编程语言(尽管为这样的任务您需要编写的 Python 代码量是微不足道的)。
据我所知,Python 还没有直接、成熟的 bibTeX 阅读器。