有没有办法在python中使用dictionary来打印两个输出:一个作为整个令牌的字符串,另一个作为numb

2024-10-04 05:30:59 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有大约千行的文件,看起来像这样:

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

我有代码,寻找第5列的id和抓取两个字母之间的数字。你知道吗

有没有一种方法,我也可以在第5列(或第6列令牌)的id之后获取整个令牌。你知道吗

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

到目前为止,我得到的是(这段代码将给我数字,但是有没有方法可以同时得到要计算的数字和要打印到输出文件上的该标记的整个字符串): 例如,如果我调用lookup[Q14591],它会给我['177','26',418],但我还需要177t 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))

Tags: 文件代码linecode数字lookupaamutation
2条回答

当使用正则表达式时,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']

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

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

有了这个:

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

[您已经有了要询问的部分…您正在正则表达式中使用它!]你知道吗

至于您现在如何访问: 在此之前:

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

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

…所以查找[Q14591][0]=='177',查找[Q14591][1]=='A177T'

相关问题 更多 >