当前位置:首页>python>微禾明内部 SOP:拒绝手动检索!Python 一键将百条纯文本参考文献批量导入 EndNote

微禾明内部 SOP:拒绝手动检索!Python 一键将百条纯文本参考文献批量导入 EndNote

  • 2026-10-11 07:52:38
微禾明内部 SOP:拒绝手动检索!Python 一键将百条纯文本参考文献批量导入 EndNote

【顶部引导】本文包含微禾明内部自研效率代码,强烈建议收藏/转发,解放你的双手!点击上方蓝字关注「微禾明」,获取更多硬核生信代码与临床科研干货!

各位科研工作者,大家好。
你是否经历过以下让人戴上“痛苦面具”的时刻: 导师扔给你一篇高质量综述,或者一份长达几页的 Word 参考文献列表,轻描淡写地说:“把这些文献都加到咱们的 EndNote 库里,顺便把它们引用的核心文章也找出来看看。”
面对几十上百条纯文本格式的参考文献(比如 [1] Yan M, Fan X...),传统的做法是:打开 PubMed 或 Google Scholar ➡️ 复制粘贴标题 ➡️ 搜索 ➡️ 点击 Cite ➡️ 下载 .nbib 或 .enw 文件 ➡️ 导入。重复 100 次,一个上午就这么废了。
科研不该是枯燥的体力活。今天,微禾明资深生信与数据挖掘团队,直接为您公开我们的内部自动化文献入库 Python 脚本!只需把文本丢进 TXT,一键批量生成可以直接拖入 EndNote 的 RIS 文件!

核心亮点:这个脚本到底有多神?

这款脚本调用了全球最大的引文数据库之一的 Crossref API,实现了真正的“傻瓜式”自动化:
✅智能模糊匹配:无论你是直接输入 DOI,还是带有 [1] 前缀的纯文本参考文献格式,系统都能自动切割、清洗,并精准锁定目标文献。 ✅一键生成标准格式:自动将文献元数据转换为标准的 RIS 格式(可以直接无缝拖入 EndNote、Mendeley 或 Zotero)。 ✅裂变式文献抓取(杀手锏!):如果你开启了 FETCH_ITS_REFERENCES = True 功能,脚本不仅会帮你下载目标文献,还会顺藤摸瓜,把这篇文献背后引用的几百条参考文献一次性全部扒下来!做系统综述(Systematic Review)和 Meta 分析时,这个功能简直是神兵利器。

极客实操:核心代码全公开

Step-by-Step 自动化流程解析

以下是微禾明团队的完整核心源码。新建一个 target.Ref.txt,把你乱七八糟的参考文献文本粘贴进去,然后运行这段 Python 代码吧:
import requestsimport timeimport osimport re# ================= 配置区 =================# 如果设为 True: 不仅会将 txt 中的文献加入 EndNote,还会把它们附带的几百条参考文献也拉取下来。# 如果设为 False: 只转换 txt 列表中的文献本身(非常适合纯文本参考文献列表的批量格式化)。FETCH_ITS_REFERENCES = True# ==========================================def get_doi_from_text(text):    """    智能识别:支持 DOI、文章题目、或是完整的纯文本参考文献(如 "[1] Yan M, Fan X...")    """    text = text.strip()    if not text:        return None    # 如果输入带 [1] 或 1. 这种前缀,先把它切掉,提高搜索准确率    text = re.sub(r'^(\[\d+\]|\d+\.\s*)', '', text).strip()    # 如果文本直接是 DOI (例如 10.1038/s41467-020-14979-6)    if re.match(r'^10\.\d{4,9}/[-._;()/:A-Za-z0-9]+$', text):        return text    # 如果是题目或文本参考文献,调用数据库搜索    print(f"  🔍 正在全球数据库中智能匹配: '{text[:45]}...'")    url = "https://api.crossref.org/works"    params = {"query.bibliographic": text, "rows": 1, "select": "DOI"}    try:        response = requests.get(url, params=params, timeout=10)        if response.status_code == 200:            items = response.json().get("message", {}).get("items", [])            if items:                return items[0].get("DOI")    except Exception as e:        pass    return Nonedef get_references_by_doi(target_doi):    """通过文章的 DOI,拉取其包含的所有参考文献"""    url = f"https://api.crossref.org/works/{target_doi}"    try:        response = requests.get(url, timeout=15)        if response.status_code == 200:            return response.json().get("message", {}).get("reference", [])    except Exception:        pass    return []def convert_doi_to_enw(doi):    """将参考文献的 DOI 转换为 EndNote/RIS 标准格式"""    url = f"https://api.crossref.org/works/{doi}/transform"    headers = {'Accept': 'application/x-research-info-systems'} # 请求 RIS 格式    try:        response = requests.get(url, headers=headers, timeout=10)        if response.status_code == 200:            return response.text    except:        pass    return Nonedef main():    input_file = "target.Ref.txt"    output_file = "Batch_All_References.ris"    if not os.path.exists(input_file):        print(f"❌ 找不到文件 '{input_file}'!请在当前目录下创建并填入数据。")        return    with open(input_file, 'r', encoding='utf-8') as f:        target_list = [line.strip() for line in f if line.strip()]    if not target_list:        print(f"⚠️ '{input_file}' 是空的,请输入内容后重试。")        return    print(f"🚀 成功读取到 {len(target_list)} 条目标数据!准备开始批量处理...\n")    # 初始化输出文件(清空旧数据)    with open(output_file, "w", encoding="utf-8") as f:        f.write("")    total_targets_saved = 0    total_refs_saved = 0    for idx, target in enumerate(target_list):        print(f"========== 正在处理第 [{idx+1}/{len(target_list)}] 项 ==========")        target_doi = get_doi_from_text(target)        if not target_doi:            print(f"❌ 无法在数据库中找到该文献的记录,已跳过。\n")            continue        print(f"  ✅ 锁定目标 DOI: {target_doi}")        # ---------------------------------------------------------        # 新增核心功能:将 txt 中的文献【本身】转换并加入 EndNote        # ---------------------------------------------------------        print(f"  📥 正在将目标文献本身写入文件...")        target_ris = convert_doi_to_enw(target_doi)        if target_ris:            with open(output_file, "a", encoding="utf-8") as f:                f.write(target_ris + "\n\n")            total_targets_saved += 1            print(f"  🌟 目标文献本身已成功添加!")        else:            print(f"  🔴 目标文献本身转换失败。")        time.sleep(0.3)        # ---------------------------------------------------------        # 根据配置决定是否拉取它引用的所有参考文献        # ---------------------------------------------------------        if FETCH_ITS_REFERENCES:            refs = get_references_by_doi(target_doi)            if not refs:                print(f"  ⚠️ 数据库中没有该文献的引文列表数据,已跳过引文拉取。\n")                continue            print(f"  📚 找到它引用的 {len(refs)} 条参考文献,开始转换...")            with open(output_file, "a", encoding="utf-8") as f:                for i, ref in enumerate(refs):                    ref_doi = ref.get("DOI")                    if ref_doi:                        ris_data = convert_doi_to_enw(ref_doi)                        if ris_data:                            f.write(ris_data + "\n\n")                            f.flush()                            total_refs_saved += 1                            print(f"    [{i+1}/{len(refs)}] 🟢 引文转换成功")                        else:                            print(f"    [{i+1}/{len(refs)}] 🔴 引文转换失败")                    else:                        print(f"    [{i+1}/{len(refs)}] 🟡 无 DOI 数据,已跳过")                    time.sleep(0.3)         print("\n")     print("="*50)    print(f"🎉 全部处理完成!")    print(f"🏆 成功存入【txt目标文献本身】: {total_targets_saved} 条")    if FETCH_ITS_REFERENCES:        print(f"🏆 成功存入【连带的参考文献】: {total_refs_saved} 条")    print(f"📁 结果已保存至: {output_file}")    print(f"💡 您可以现在将 {output_file} 直接拖入 EndNote 中。")    print("="*50)if __name__ == "__main__":    main()
(运行结束后,直接将生成的 .ris 文件拖拽进 EndNote 列表框,所有文献瞬间整齐划一地入库!)

专属定制:微禾明文献挖掘与生信分析外包服务

Why Weihe Ming?

科研中的数据处理痛点,远不止“导入参考文献”这么简单。 如果你觉得:
系统综述 / Meta 分析的前期文献检索与去重耗时耗力,几千篇文献无从下手;
从 GEO/TCGA 数据库下载的海量转录组数据乱成一团,缺乏生信清洗与分析能力;
你需要专门写一套Python 爬虫/文本挖掘脚本,用来批量抓取特定病种的临床试验数据。
交给微禾明,我们是您的专属“科研加速器”!
✅数据挖掘与爬虫定制:提供合规的医疗数据库批量挖掘、文献抓取与清洗服务。 
✅生信分析与作图方案:全覆盖 WGCNA、单细胞测序、临床预测模型构建,并交付可直接用于发文的高清矢量图与完整源码。 
✅Meta 分析辅助:利用自研算法大幅提高文献筛选效率,提供精准的森林图、漏斗图等统计分析支持。

🎁 粉丝专属福利

Python 环境配置太麻烦,代码报错看不懂? 我们为您打包好了【文献自动化入库一键运行版.exe】(无需安装Python,双击即用)。

👇 扫码添加微禾明技术顾问,发送暗号“文献脚本”,即可免费领取软件工具包!

微禾明生物科技专注:临床数据挖掘 | 生信分析外包 | 定制科研代码开发

最新文章

随机文章