You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python关联CSV与文本文件,按PMID匹配追加引用数据

Python实现PMID匹配追加引用内容方案

实现逻辑

  1. 先加载所有CSV引用数据集,构建PMID到对应引用内容的映射字典,支持同时传入多个CSV文件
  2. 逐行读取原PMID文本文件,识别到PMID行时提取PMID编号,从映射字典中匹配对应的引用内容
  3. 匹配成功就紧接在PMID行后插入引用行,其余内容原样输出,同时支持自定义行前缩进量

依赖安装

运行前先安装pandas用于读取CSV:
pip install pandas

完整代码

import pandas as pd
import os

def build_pmid_map(csv_file_list):
    """
    传入CSV文件路径列表,构建PMID到引用内容的映射
    CSV需包含PMID、Citation number两个必填字段
    """
    pmid_citation = {}
    for csv_path in csv_file_list:
        if not os.path.isfile(csv_path):
            print(f"跳过不存在的文件:{csv_path}")
            continue
        # 统一PMID为字符串类型,避免数字/字符串类型不匹配导致匹配失败
        df = pd.read_csv(csv_path, dtype={"PMID": str})
        for _, row in df.iterrows():
            pmid_val = str(row["PMID"]).strip()
            # 可根据实际CSV字段调整引用内容的拼接规则
            citation_line = f'Citation - {row["Citation number"]}   "{row.get("citation_desc", "")}"'
            pmid_citation[pmid_val] = citation_line
    return pmid_citation

def process_pmid_txt(input_txt, output_txt, pmid_map, line_indent=4):
    """
    处理PMID文本文件,追加匹配到的引用内容
    line_indent:输出行前置空格数,和示例一致设为4,无缩进需求设为0
    """
    with open(input_txt, 'r', encoding='utf-8') as f_in, open(output_txt, 'w', encoding='utf-8') as f_out:
        for raw_line in f_in:
            # 写入原行,添加缩进
            out_line = " " * line_indent + raw_line
            f_out.write(out_line)
            # 识别PMID行
            if raw_line.strip().startswith("PMID-"):
                current_pmid = raw_line.strip().split("PMID-")[-1].strip()
                if current_pmid in pmid_map:
                    # 写入匹配到的引用行
                    citation_out = " " * line_indent + pmid_map[current_pmid] + "\n"
                    f_out.write(citation_out)

if __name__ == "__main__":
    # 按需修改以下路径配置
    # 多个CSV文件直接往列表里加路径即可
    CSV_LIST = [
        "./citation_1.csv",
        "./citation_2.csv"
    ]
    INPUT_PMID_TXT = "./pmid_input.txt"
    OUTPUT_PMID_TXT = "./pmid_output.txt"

    # 执行处理
    pmid_mapping = build_pmid_map(CSV_LIST)
    process_pmid_txt(INPUT_PMID_TXT, OUTPUT_PMID_TXT, pmid_mapping)
    print(f"处理完成,结果已输出至:{OUTPUT_PMID_TXT}")

调整说明

  • 若你的CSV中引用描述的字段名不是citation_desc,可以自行修改拼接citation_line部分的代码
  • 不需要输出行前缩进的话,调用process_pmid_txt时传入line_indent=0即可
  • 代码自动跳过不存在的CSV文件,不会中断整体执行

内容的提问来源于stack exchange,提问作者MASTANELAL ABDULGAFAR KURESHI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 14:48:03