如何从注释文件提取Tag列并通用追加至分析输出文件?
核心思路
- 解析两个文件结构,定位输出文件中「样本信息」与「差异分析结果」的分界点
- 自动识别注释文件中的Tags列(基于列名关键词匹配,如
Tags/Comparison_Tags等,不区分大小写) - 按样本ID对应关系,将Tags列数据插入到输出文件的指定位置
具体实现(以Python为例)
步骤1:读取并解析注释文件
import pandas as pd # 读取注释文件,自动识别分隔符(支持csv/tsv/txt) anno_df = pd.read_csv("geo_annotation.txt", sep="\t", header=0) # 自动匹配Tags列 tag_cols = [col for col in anno_df.columns if "tag" in col.lower()] if not tag_cols: raise ValueError("注释文件未找到Tags列,请检查列名") target_tag_col = tag_cols[0] # 构建样本ID与Tags的映射(自动识别样本ID列) sample_id_cols = [col for col in anno_df.columns if "sample" in col.lower() or "id" in col.lower()] if not sample_id_cols: raise ValueError("未找到样本ID列,请检查注释文件") sample_id_col = sample_id_cols[0] sample_tag_map = anno_df.set_index(sample_id_col)[target_tag_col].to_dict()
步骤2:定位输出文件的插入分界点
假设输出文件结构为:
样本信息表头
样本信息行1
样本信息行2差异分析结果表头
差异分析结果行1
...
通过关键词或分隔符定位分界点:
# 读取输出文件内容 with open("analysis_output.txt", "r") as f: output_lines = f.readlines() # 优先通过差异分析表头关键词定位(如log2FC、pvalue) split_idx = None for i, line in enumerate(output_lines): if "log2FC" in line or "pvalue" in line: split_idx = i break # 备选方案:通过分隔符或空行定位 if not split_idx: for i, line in enumerate(output_lines): stripped_line = line.strip() if stripped_line == "---" or not stripped_line: split_idx = i break if not split_idx: raise ValueError("无法定位样本信息与差异结果的分界点,请检查输出文件结构")
步骤3:插入Tags列并生成最终文件
# 处理样本信息部分,添加Tags列 sample_info_lines = output_lines[:split_idx] # 修改表头,追加Tags列名 sample_info_lines[0] = f"{sample_info_lines[0].strip()}\t{target_tag_col}\n" # 为每一行样本信息匹配对应的Tags值 for i in range(1, len(sample_info_lines)): sample_id = sample_info_lines[i].split("\t")[0] # 假设第一列为样本ID tag_val = sample_tag_map.get(sample_id, "NA") sample_info_lines[i] = f"{sample_info_lines[i].strip()}\t{str(tag_val)}\n" # 拼接最终内容并写入 final_content = sample_info_lines + output_lines[split_idx:] with open("final_analysis_output.txt", "w") as f: f.writelines(final_content)
通用化优化点
- 支持自定义样本ID列、Tags列的匹配规则,适应不同命名习惯
- 增加异常捕获机制,处理样本ID不匹配、文件格式错误等情况
- 封装为命令行脚本,通过参数指定输入输出路径,方便批量处理
内容的提问来源于stack exchange,提问作者PesKchan
相关产品推荐
相关产品推荐

