You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

50 lines
1.5 KiB

import bibtexparser as bp
from bibtexparser.bparser import BibTexParser
from bibtexparser.customization import convert_to_unicode
bibdata=[]
list=[]
while True:
filename=input("用于合并的bib文件路径(按回车结束输入):")
if(filename==""):break
#filename='/home/tmn07/Desktop/DeepM.bib'
# /home/tmn07/Desktop/DeepM.bib
# /home/tmn07/Desktop/citations_Neves2002Topology.bib
with open(filename, encoding='UTF-8') as bibfile:
parser = BibTexParser(common_strings=True) # 声明解析器类
parser.customization = convert_to_unicode # 将BibTeX编码强制转换为UTF编码
bibdata = bp.load(bibfile, parser) # 通过bp.load()加载
for item in bibdata.entries:
flag = 1
for it in list:
if item['title'].lower() == it['title'].lower() and item['ENTRYTYPE'] == it['ENTRYTYPE'] or item['ID'] == it['ID']:
it = it.update(item)
print(item['title'].lower())
flag = 0
break
if flag == 1:
list.append(item)
#print(list)
filename=input('保存结果的文件路径:')
#filename='/home/tmn07/Desktop/result.bib'
# /home/tmn07/Desktop/result.bib
bibdata.entries=list
with open(filename,'w') as bibfile:
from bibtexparser.bwriter import BibTexWriter
writer = BibTexWriter()
writer.contents = ['entries']
writer.indent = ' '
writer.order_entries_by = ('id')
e = bp.dumps(bibdata, writer)
bibfile.write(e)