我有6个文本文件(每个文件对应一个特定的样本),每个文件都是这样的:
Gene_ID Gene_Name Strand Start End Length Coverage FPKM TPM
ENSMUSG00000102735 Gm7369 + 4610471 4611406 936 0 0 0
ENSMUSG00000025900 Rp1 - 4290846 4409241 10926 0 0 0
ENSMUSG00000104123 Gm37483 - 4363346 4364829 1484 0 0 0
ENSMUSG00000102175 Gm6119 - 4692219 4693424 1206 0.328358 0.015815 0.008621
我想从1&收集所有元素一个文件中的2列和新文件中每个样本的相应tpm值(第9列),因此在没有tpm值的地方输入0。
我的输出文件应如下所示:
gene_id gene_name sample1_tpm sample2_tpm sample3_tpm ......sample6_tpm
答案 0 :(得分:0)
执行此操作的一种方法是保留一个存储每个gene_id的样本值的字典。
初始化字典= {}
遍历6个文件中的每个文件并执行:
for file in [f1,f2,f3..f6]:
for line in file:
labels = line.split(" ")
val = 1 if labels[8] else 0
if labels[0] not in dictionary:
dictionary[labels[0]] = {'name' : labels[1], 'sample' : [val]}
else:
dictionary[labels[0]]['sample'].append(val)
这会将键存储为gene_id和name,sample(6个sample_id列表)作为值。
现在可以通过迭代键和值来写入输出文件。
f = open("output.txt","w+")
f.write("gene_id,gene_name,sample1,sample2,sample3,sample4,sample5,sample6\n")
for key in dictionary.keys():
samples = ",".join(dictionary[key]['sample'])
f.write(dictionary[key]+","+dictionary[key]['name']+","+samples+"\n")
f.close()