如何在Pmatch结果中提取坐标?

2024-05-16 01:43:47 发布

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

从这个链接http://www.gene-regulation.com/cgi-bin/pub/programs/pmatch/bin/p-match.cgi产生了我需要处理的结果,以便只获得序列ID、开始和结束位置。从结果中提取坐标信息的方法有哪些?下面是示例结果

Scanning sequence ID:   BEST1_HUMAN

              150 (-)  1.000  0.997  GGAAAggccc                                   R05891
              354 (+)  0.988  0.981  gtgtAGACAtt                                  R06227
V$CREL_01c-RelV$EVI1_05Evi-1

Scanning sequence ID:   4F2_HUMAN

              365 (+)  1.000  1.000  gggacCTACA                                   R05884
               789 (-)  1.000  1.000  gcgCGAAA                                       R05828; R05834; R05835; R05838; R05839
V$CREL_01c-RelV$E2F_02E2F

预期输出:

Sequence ID start end
(end site是添加到起始站点的短序列ggaaaggcc的数目)

BEST1_HUMAN 150 160
BEST1_HUMAN 354 365
4F2_HUMAN   365 375
4F2_HUMAN   789 797

有人能帮我吗


Tags: idhttpbin链接www序列endcgi
1条回答
网友
1楼 · 发布于 2024-05-16 01:43:47

使用this answer中的片段将结果分割为大小均匀的块,并提取所需的数据:

def chunks(l, n):
    #Generator to yield n sized chunks from l
    for i in xrange(0, len(l), n):
        yield l[i: i + n]

with open('p_match.txt') as f:
    for chunk in chunks(f.readlines(), 6):
        sequence_id = chunk[0].split()[-1].strip()
        for i in (2,3):
            start = int(chunk[i].split()[0].strip())
            sequence = chunk[i].split()[-2].strip()
            stop = start + len(sequence)
            print sequence_id, start, stop

编辑:很明显,结果可能包含可变数量的起始位置,因此,上述均分块的解决方案不起作用。然后可以使用regex路径或逐行遍历文件:

with open('p_match.txt') as f:
    text = f.read()
    chunks = text.split('Scanning sequence ID:')
    for chunk in chunks:
        if chunk:
            lines = chunk.split('\n')
            sequence_id = lines[0].strip()
            for line in lines:
                if line.startswith('              '):
                    start = int(line.split()[0].strip())
                    sequence = line.split()[-2].strip()
                    stop = start + len(sequence)
                    print sequence_id, start, stop

相关问题 更多 >