如何用Python关联CSV与文本文件,按PMID匹配追加引用数据
Python实现PMID匹配追加引用内容方案
实现逻辑
- 先加载所有CSV引用数据集,构建PMID到对应引用内容的映射字典,支持同时传入多个CSV文件
- 逐行读取原PMID文本文件,识别到PMID行时提取PMID编号,从映射字典中匹配对应的引用内容
- 匹配成功就紧接在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
相关产品推荐
相关产品推荐

