在Python中将元素添加到bibtexfile中

在Python中将元素添加到bibtexfile中,python,bibtex,Python,Bibtex,我已经创建了一个脚本,它从许多PDF中提取摘要和关键字。我还有一个bibtex文件的集合,我想在其中放置我提取的文本。我要寻找的是一种向bibtex文件添加元素的方法 我编写了一个简短的解析器: #!/usr/bin/python #-*- coding: utf-8 import os from pybtex.database.input import bibtex dir_path = "nime_archive/nime/bibtex/" num_texts = 0 class Bi

我已经创建了一个脚本,它从许多PDF中提取摘要和关键字。我还有一个bibtex文件的集合,我想在其中放置我提取的文本。我要寻找的是一种向bibtex文件添加元素的方法

我编写了一个简短的解析器:

#!/usr/bin/python
#-*- coding: utf-8

import os
from pybtex.database.input import bibtex

dir_path = "nime_archive/nime/bibtex/"
num_texts = 0

class Bibfile:
  def __init__(self,bibs):
    self.bibs = bibs
    for a in self.bibs.entries.keys():
      num_text += 1
       print bibs.entries[a].fields['title']
       #Need to implement a way of getting just the nime-identificator
       try:
         print bibs.entries[a].fields['url']
       except:
         print "couldn't find URL for text: %s " % a


    print "creating new bibfile"



bibfiles = []
parser = bibtex.Parser()


for infile in os.listdir(dir_path):
    if infile.endswith(".bib"):
      print infile
      bibfiles = Bibfile(parser.parse_file(dir_path+infile))

我的问题是,是否有可能使用Pybtex将元素添加到现有的bibtex文件中(或创建一个副本),这样我就可以将提取的内容与现有的内容合并。如果这在Pybtex中是不可能的,那么我可以使用什么其他的bibtex解析器呢

我从未使用过pybtex,但快速浏览一下,您可以添加条目。由于
self.bibs.entries
似乎是一个
dict
,您可以找到一个唯一的键,并向其中添加更多的条目。例如:

key = "some_unique_string"
new_entry = Entry('article',
        fields={
            'language': u'english',
            'title': u'Predicting the Diffusion Coefficient in Supercritical Fluids',
            'journal': u'Ind. Eng. Chem. Res.',
            'volume': u'36',
            'year': u'1997',
            'pages': u'888-895',
        },
        persons={'author': [Person(u'Liu, Hongquin'), Person(u'Ruckenstein, Eli')]},
    )
self.bibs.entries[key] = new_entry
(警告:未经测试)

如果您想知道我从哪里得到这个示例表单:请查看pybtex源代码的
tests/
子目录。上面的代码示例主要是从
tests/database\u test/data.py
获得的。如果缺少实际的文档,测试可能是一个很好的文档来源。

.data.add_entry(key,entry)对我来说很有用。在这里,我使用了一个手动创建的条目(取自Evert的示例),但您可以从另一个bib复制一个现有条目,您也在解析该条目

   from pybtex.database.input.bibtex import Parser
   from pybtex.core import Entry, Person

   key = "some_unique_string"

   new_entry = Entry('article',
           fields={
               'language': u'english',
               'title': u'Predicting the Diffusion Coefficient in Supercritical Fluids',
               'journal': u'Ind. Eng. Chem. Res.',
               'volume': u'36',
               'year': u'1997',
               'pages': u'888-895',
           },
    persons={'author': [Person(u'Liu, Hongquin'), Person(u'Ruckenstein, Eli')]},
       )

   newbib_parser = Parser()
   newbib_parser.data.add_entry(key, new_entry)
   print newbib_parser.data

您需要正确缩进代码。在Python中,这不是可选的
num_text+=1
缩进不正确;除此之外,尽量在整个代码中保留4个空格的缩进,不要更改它(就像在最后几行中所做的那样),这要感谢语法提示。我使用TextMate,并试图保持语法的一致性,但当我复制、移动和更改内容时,有时会有点不一致,特别是因为我无法直观地看到它是制表符还是空格,或者如果块有三个或四个缩进,则没有任何提示。有没有一种很好的方法可以通过这种方式清理并使代码更加正确呢。最好是全部阅读,但至少要阅读上的部分(非常简短的摘要:总是用四个空格的倍数缩进;永远不要使用制表符。一个好的文本编辑器会自动转换)。谢谢你的评论,这看起来像是我一直在找的东西。我仍然在解决一个问题。我已经有了书目数据,但我想将它们与摘要和关键字合并在一起。是否有任何Python构造可用于访问元素,然后添加所需的部分?以下是我尝试执行的代码:出现的错误状态:错误:“Entry”对象不支持项分配(第48行和第49行)dir(bibtex.Entry)=['class'、'delattr'、'dict'、'doc'、'eq'、'format'、'getattribute'、'hash'、'init'、'module'、'new'、'reduce'、'reduce_ex'、'repr'、'setattr'、'sizeof'、'str'、'subclass hook'、'weakref'、'add_person'、'get_crossref']您使用的是什么版本的pybtex?我从存储库安装了这个版本(我没有收到你的错误。我使用的版本是:pybtex-0.16错误是:回溯(最近一次调用):文件“bibtexparser.py”,第95行,在bibfiles=Bibfile(parser.parse_File(dir_path+infle),infle)文件“bibtexparser.py”,第65行,在init self.bibs.entries[a]['abstract']=res[0]['abstract']TypeError:“条目”对象不支持项目分配1x-193-157-251-80:NIME ola$