目录

latex-bib文件参考文献去重

目录

latex bib文件参考文献去重

使用latex写文章时,会使用bib文件存储参考文献,有时会出现参考文献重复的情况,需要去重,可以使用如下代码:

import json
import re


class DuplicateCheck:
    def __init__(self):
        self.bib_path = '/path/to/XXX.bib' # 要去重的bib文件路径
        self.data = ''
        self.dict = {}  # key=title, value=cite
        self.repeat = ''

    def open_bib(self):
        with open(self.bib_path, 'r', encoding='UTF-8') as f:
            self.data = f.read().split('@')
            print(self.data[1])  # 测试
            # for line in f:
            #     print(line)

    def check(self):
        length = len(self.data)
        for i in range(1, length):
            strs = re.split(r'{|,|}', self.data[i])
            # print(str)

            # 寻找Title
            for j in range(len(strs)):
                if 'title' in strs[j] and 'booktitle' not in strs[j]:
                    if strs[j+1] in self.dict.keys():
                        r = f'{strs[j+1]}此文献重复!!!!!!!!!!!!!!!!!!\n它的索引{self.dict[strs[j+1]]}\n\n'
                        print(r)
                        self.repeat += r
                    else:
                        self.dict[strs[j+1]] = strs[1]

    def save(self):
        ref = json.dumps(self.dict, indent=4, ensure_ascii=False, sort_keys=True)
        with open('ref.json', 'w', encoding='UTF-8') as f:
            f.write(ref) 
        with open('ref_repeat.txt', 'w', encoding='UTF-8') as f:
            f.write(self.repeat)


# 按装订区域中的绿色按钮以运行脚本。
if __name__ == '__main__':
    check = DuplicateCheck()
    check.open_bib()
    check.check()
    check.save()

给定要去重的bib文件路径 /path/to/XXX.bib ,运行代码后,在当前路径下得到 ref.json 文件,展示了所有参考文献信息,还有 ref_repeat.txt ,展示了重复的参考文献。