2

所以我有大约一千行的文件,如下所示:

COADREAD    ZNF271  Missense_Mutation   TCGA-AA-3947    Q14591  A177T 
COADREAD    ZNF271  Missense_Mutation   TCGA-AA-A00N    Q14591  I26T  
COADREAD    ZNF271  Missense_Mutation   TCGA-AG-A002    Q14591  M418T

我有代码查找 id 的第 5 列并获取两个字母之间的数字。

有没有办法我也可以在第 5 列(或第 6 列标记)中的 id 之后获取整个标记。

我想抓住那个令牌,这样我就可以把它写到另一个文件上。

这是我到目前为止所拥有的(这段代码会给我数字,但是有没有办法让数字和该令牌的整个字符串打印到输出文件):例如,如果我调用lookup [Q14591]它给了我 ['177','26',418] 但我也想要 A177T I26T 和 M418T

lookup = defaultdict(list)
mydata = open('summaryfile.txt')
for line in csv.reader(mydata, delimiter='\t'):
    code = re.match('[a-z](\d+)[a-z]', line[-1], re.I)
    if code: 
        lookup[line[-2]].append(code.group(1))
4

2 回答 2

1

使用正则表达式时,group(0)应包含整个匹配的字符串。所以在你的情况下:

code.group(0)

应该包含整个令牌。因此,如果您将代码修改为如下所示:

lookup = defaultdict(list)
wholelookup = defaultdict(list)

mydata = open('summaryfile.txt')
for line in csv.reader(mydata, delimiter='\t'):
    code = re.match('[a-z](\d+)[a-z]', line[-1], re.I)
    if code: 
        lookup[line[-2]].append(code.group(1))
        wholelookup[line[-2]].append(code.group(0))

然后你可以像这样访问整个令牌:

wholelookup['Q14591']

或像这样的子令牌:

lookup['Q14591']
于 2012-07-23T19:30:39.580 回答
0

当然。像这样:替换这一行:

lookup[line[-2]].append(code.group(1))

有了这个:

lookup[line[-2]].append((code.group(1),line[-1]))

[你已经有了你要问的部分......你正在正则表达式中使用它!]

至于您现在如何访问它:在您拥有之前:

lookup[Q14591] == ['177','26',418] 

现在:查找[Q14591] == [('177', 'A177T'), ('26', 'I26T'), ('418',' 'A177T')]

...所以查找[Q14591][0] == '177',并且查找[Q14591][1] == 'A177T'

于 2012-07-23T19:32:25.487 回答