Skip to main content
 首页 » 编程设计

python之处理 bibtex 文件的最佳方法

2025年05月04日9lidabo

我有一个包含大约 640 个条目(上升趋势)的 bibtex 文件。我使用 Jabref 来维护这个文件。事实上,我想收拾东西,做一些 Jabref 帮不上忙的事情。所以我想编写代码并尽可能灵活。

一些任务是例如哪些文章缺少"file"条目或“标题”条目?哪些文章有相同的文件入口等

我的方法是填充字典列表。 Dictionary 包含 bibtex 文件中一篇文章的信息。例如:

elements = [{ 
'author': 'Ando, K. and Ota, H. and Oki, T', 
'comment': 'modelling, fundamental diagram, plane, cellular automata', 
'file': 'Ando1988.pdf', 
'issue': '2', 
'journal': 'Railway R', 
'owner': 'bob', 
'timestamp': '2008.01.09', 
'title': 'Forecasting the flow of people', 
'type': 'ARTICLE', 
'volume': '45', 
'year': '1988'}, 
{'author': "Helbing, D. and Farkas, I. J. and Moln\\'{a}r, P. and Vicsek, T", 
'booktitle': 'Pedestrian and Evacuation Dynamics', 
'editor': 'Schreckenberg, Michael and Scharma, Som Deo', 
'file': 'Helbing2002.pdf', 
'key': 'Helbing2002', 
'owner': 'jack', 
'publisher': 'Springer', 
'timestamp': '2007.12.12', 
'title': 'Simulation of pedestrian crowds in normal and evacuation situations', 
'type': 'INPROCEEDINGS', 
'year': '2002' 
}] 

我在这个结构上运行的函数总是以类似的东西开头

for element in elements: 
   do_stuff with element 

尽管我的代码运行良好,但不知何故,我有一种感觉,我正在蛮力明智地做事。这就是为什么我想发起讨论并问你:

  1. 有没有比我正在使用的结构更整洁/更智能/更优雅的结构 (词典列表)?
  2. 您将如何组织数据,以便 处理信息变得更加容易。

编辑:我想提一下,由于文章类型不同(书籍、 session 论文、文章等),而且因为我只是个人,所以字典可能有不同的键和不同数量的键。

请您参考如下方法:

字典非常适​​合处理不可预测的键值对。对象非常适合处理可预测的键值对(事实上,在 Python 中,您可以在自己的对象中存储任意属性)。

类和对象可能给您的主要优势:

  1. 如果您想预定义不同类型的条目,并检查您的数据是否符合该模式、类和类层次结构,这将使这更容易
  2. 如果您有很多操作都依赖于弄清楚如何处理每个字典,那么可以通过继承和多态函数使这变得更清晰。
  3. 如果您发现要将集合作为值添加到哈希表中,您可能会开始发现在对象上编写方法更容易。

如果您觉得这样更容易,您也可以将类中的所有数据保存在字典中。

您还可以将一堆代码带到 codereview.stackexchange,看看您是否喜欢他们关于重构为对象的建议。