如何在合并多CSV文件时添加原文件名至输出文件?
给合并后的CSV添加数据来源标识的解决方案
完全可以实现,只需要在现有代码基础上做几处简单修改,就能给每条数据加上原文件的名称作为唯一标识:
修改后的完整代码
import csv from pathlib import Path p = Path(r'E:\Neurogen\Merging_test_data') file_list = p.glob("*.csv") # 新增Source_File列,用来存储数据来源的文件名 desired_columns = ['Source_File'] + ['Chr', 'Start', 'End', 'Ref', 'Alt', 'Func.refGene', 'Gene.refGene', 'GeneDetail.refGene', 'ExonicFunc.refGene', 'AAChange.refGene', 'Xref.refGene', 'cytoBand', 'cosmic70', 'avsnp147', 'ExAC_ALL', 'ExAC_AFR', 'ExAC_AMR', 'ExAC_EAS', 'ExAC_FIN', 'ExAC_NFE', 'ExAC_OTH', 'ExAC_SAS', 'CLINSIG', 'CLNDBN', 'CLNACC', 'CLNDSDB', 'CLNDSDBID', '1000g2015aug_all', 'SIFT_score', 'SIFT_pred', 'Polyphen2_HDIV_score', 'Polyphen2_HDIV_pred', 'Polyphen2_HVAR_score', 'Polyphen2_HVAR_pred', 'LRT_score', 'LRT_pred', 'MutationTaster_score', 'MutationTaster_pred', 'MutationAssessor_score', 'MutationAssessor_pred', 'FATHMM_score', 'FATHMM_pred', 'PROVEAN_score', 'PROVEAN_pred', 'VEST3_score', 'CADD_raw', 'CADD_phred', 'DANN_score', 'fathmm-MKL_coding_score', 'fathmm-MKL_coding_pred', 'MetaSVM_score', 'MetaSVM_pred', 'MetaLR_score', 'MetaLR_pred', 'integrated_fitCons_score', 'integrated_confidence_value', 'GERP++_RS', 'phyloP7way_vertebrate', 'phyloP20way_mammalian', 'phastCons7way_vertebrate', 'phastCons20way_mammalian', 'SiPhy_29way_logOdds', 'Otherinfo'] desired_rows = [] for csv_file in file_list: with open(csv_file, 'r') as f: reader = csv.DictReader(f) # 获取当前处理的原文件名 source_filename = csv_file.name for row in reader: # 构造行数据时,加入Source_File字段 desired_row = {c: row[c] for c in desired_columns if c != 'Source_File'} desired_row['Source_File'] = source_filename desired_rows.append(desired_row) with open('merged.csv', 'w', newline='') as f: writer = csv.DictWriter(f, fieldnames=desired_columns) writer.writeheader() writer.writerows(desired_rows)
关键改动说明
- 在
desired_columns开头新增'Source_File'列,确保表头会包含这个标识字段 - 遍历每个CSV文件时,用
csv_file.name获取原文件名(如果需要完整路径可以替换为str(csv_file)) - 构造每行数据时,先提取指定业务列,再添加
Source_File字段和对应的文件名 - 写入时
DictWriter会自动把新字段加入表头和每行数据中
这样合并后的CSV里,每条数据都会明确显示来自哪个原文件,完全满足需求。
内容的提问来源于stack exchange,提问作者Al Muhaimin
相关产品推荐
相关产品推荐

