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

使用Python将BibTex文件转换为数据库条目,python,mysql,bibtex,Python,Mysql,Bibtex,给定一个bibTex文件,我需要将相应的字段(author、title、journal等)添加到MySQL数据库的表中(使用自定义模式) 在做了一些初步的研究之后,我发现存在一些可以用来将bib文件转换为xml的文件。我最初的想法是将其转换为XML,然后用python解析XML以填充字典 我的主要问题是: 有没有更好的方法来进行转换 有没有一个库可以直接解析bibTex并用python提供字段 (我确实找到了,它在内部使用了bibutils,但是没有太多的文档,我发现很难让它工作起来)。转换为X

给定一个bibTex文件,我需要将相应的字段(author、title、journal等)添加到MySQL数据库的表中(使用自定义模式)

在做了一些初步的研究之后,我发现存在一些可以用来将bib文件转换为xml的文件。我最初的想法是将其转换为XML,然后用python解析XML以填充字典

我的主要问题是:

  • 有没有更好的方法来进行转换
  • 有没有一个库可以直接解析bibTex并用python提供字段

  • (我确实找到了,它在内部使用了bibutils,但是没有太多的文档,我发现很难让它工作起来)。

    转换为XML是个好主意

    XML作为独立于应用程序的数据格式存在,因此您可以使用现成的库对其进行解析;使用它作为中介没有特别的缺点。事实上,您通常可以将XML导入到数据库中,而无需使用Python之类的编程语言(尽管对于这样的任务,您需要编写的Python数量微不足道)


    据我所知,Python没有直接、成熟的bibTeX阅读器。

    老问题,但我现在正在使用库做同样的事情,库中有一个内置的解析器:

    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
    

    您还可以使用Python BibtexParser:

    文件:

    它非常直接(我在生产中使用它)


    恕我直言,我不是这个库的开发人员。

    您可以使用Perl包。它包含一个
    bib2sql
    工具,该工具从BibTeX数据库生成一个SQL数据库,模式如下:

    另一个工具:


    然后,您可以通过编写一些SQL转换查询将其输入到模式中。

    我的解决方法是使用bibtexparser将相关字段导出到csv文件中

    导入bibtexparser
    作为pd进口熊猫
    打开(“../bib/small.bib”)作为bibtex\u文件:
    bib_数据库=bibtexparser.load(bibtex_文件)
    df=pd.DataFrame(bib_database.entries)
    选择=df[['doi','number']]
    选择.to_csv('temp.csv',index=False)
    
    然后将csv写入数据库中的表中,并删除
    temp.csv


    这避免了pybtex I的一些复杂情况。

    长时间后询问at。我对你在这里做的这些图表很感兴趣。请你和我分享一下你是如何创造它的?