我有一个像这样的文件:
#chr start end count colX colY
1 100 200 1
1 300 400 2 blabla_pattern_a,blabla_pattern_b,blabla_pattern_c
2 100 400 1 blabla_pattern_a
2 500 600 4 blabla_pattern_e,blabla_pattern_c blabla_pattern_d
我正在寻找colX
和colY
中可能存在的5种不同模式(a-e)。在某些情况下,ColX
和/或ColY
也可以为空。基于这些模式的存在/不存在,我想创建5个不同的列,其值分别为X
,Y
或NA
,如下所示:
#chr start end count pattern_a pattern_b pattern_c pattern_d pattern_e
1 100 200 1 NA NA NA NA NA
1 300 400 2 X X X NA NA
2 100 400 1 Y NA NA NA NA
2 500 600 4 NA NA X Y X
我知道如何为一种模式进行此操作,但是我需要帮助才能有效地针对多种模式进行此操作。到目前为止,这是我的代码-适用于一种模式:
#!/usr/bin/env python
import csv
import sys
input_file = sys.argv[1]
with open(input_file, 'rU') as f:
data = csv.reader(f,delimiter='\t')
a=[]
for row in data:
if "pattern_a" in row[4]:
a = "X"
elif "pattern_a" in row[5]:
a = "Y"
else:
a = "NA"
print (row,a)
答案 0 :(得分:0)
类似的方法可能有用:
import csv
import sys
input_file = sys.argv[1]
patterns = ['pattern_a', 'pattern_b', 'pattern_c', 'pattern_d', 'pattern_e']
with open(input_file, 'rU') as f:
data = csv.reader(f,delimiter='\t')
for row in data:
a=[]
for pattern in patterns:
if pattern in row[4]:
a.append("X")
elif pattern in row[5]:
a.append("Y")
else:
a.append("NA")
print (a)
此输出为:
['NA', 'NA', 'NA', 'NA', 'NA']
['X', 'X', 'X', 'NA', 'NA']
['X', 'NA', 'NA', 'NA', 'NA']
['NA', 'NA', 'X', 'Y', 'X']