Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有一种有效的方法可以在python中加载大型bibtex(37000个bibtex条目)文件?_Python_Performance_Bibtex - Fatal编程技术网

有没有一种有效的方法可以在python中加载大型bibtex(37000个bibtex条目)文件?

有没有一种有效的方法可以在python中加载大型bibtex(37000个bibtex条目)文件?,python,performance,bibtex,Python,Performance,Bibtex,在我的python应用程序中,我加载了大约37000个BibTeX条目 下面的代码块将.txt文件作为bibtex文件加载,但加载文件内容以进行进一步处理需要花费大量时间。有没有更有效的方法 with open('/home/usr/Downloads/bibtexFile.txt') as bibtex_file: bibtex_str = bibtex_file.read() bib_database = bibtexparser.loads(bibtex_str) 使用bibl

在我的python应用程序中,我加载了大约37000个BibTeX条目

下面的代码块将.txt文件作为bibtex文件加载,但加载文件内容以进行进一步处理需要花费大量时间。有没有更有效的方法

with open('/home/usr/Downloads/bibtexFile.txt') as bibtex_file:
    bibtex_str = bibtex_file.read()

bib_database = bibtexparser.loads(bibtex_str)

使用
biblib==0.1.3
尝试此操作。文件
stats.bib
包含唯一格式化的bibtex条目

from pybtex.database.input import bibtex
parser = bibtex.Parser()
bib_data = parser.parse_file('stats.bib')
print (bib_data.entries)

此代码将帮助您将bib的内容推送到数据框中:

from pybtex.database.input import bibtex

#open a bibtex file
parser = bibtex.Parser()
bibdata = parser.parse_file("stats.bib")
bibkeys=bibdata.entries.keys()
bibarray= []

for bib_id in bibdata.entries:
     b = bibdata.entries[bib_id].fields
     if b["year"] is None: 
        dyear='NA'
        print dyear
     else: 
        dyear=b["year"]

     if b.get("journal"):
       djournal=b["journal"]
     else: 
       djournal='NA'  

     if b.get("booktitle"):
       dbooktitle=b["booktitle"]
     else: 
       dbooktitle='NA'      

     d = {
            'bib_id' : bib_id,  # some formula for obtaining values
            'Title' : b["title"],
            'Year' : dyear,
            'Journal' : djournal,
            'Book Title' : dbooktitle
            }
     bibarray.append(d)

bibdataset = pd.DataFrame(bibarray)

您应该尝试直接在文件对象上使用
bibtexparser.load(bibtex\u文件)
,您尝试过biblib吗?这是纯python。@MEdwin使用biblib会产生以下错误:“启动内核时发生错误”检查您安装的版本,可能是旧版本吗?嗨@ftTomAndJerry,我自己也试过安装biblib。我安装了biblib==0.1.3,我现在正在使用它,一切正常。如果你愿意,我可以分享我的代码。如果你被卡住了,还有其他选择:BabyBib,Pybtex,BibtexParser,PyBligrapher。谢谢你的代码。它的效果要好得多。使用bibtexparser,加载大数据大约需要5分钟,而使用biblib,它在0:00:15.584566(大约15秒)加载文件。但是,如果bib_数据库中的'doi'。entries[i]:file“/home/usr/anaconda3/lib/python3.7/site packages/pybtex/utils.py”,getitem return self中的第161行会产生错误。_dict[key.lower()]AttributeError:'int'对象没有属性'lower',我很高兴它能工作。我想调查一下那个错误。可能是bib文件将doi存储为整数吗?doi是一个字母数字值。因此,它不应存储为整数。我已经把文件上传到这里了。也许你可以看一看:你应该在bib_数据中为bib_id做“输入:”在循环中是bib_id是唯一的。