使用正则表达式将数据转换为Python中的字典

发布于 2021-01-29 15:05:08

我有一个采用FASTA格式排序的数据集,基本上是这样的:

>pc284  
ATCGCGACTCGAC

>pc293  
ACCCGACCTCAGC

我想将每个标签用作字典中的键,并将基因存储为值。

这是我的代码,但实际上没有做任何事情:

import re
fileData = open('d.fasta', 'r')

myDict = dict()

for line in fileData:
  match = re.search('(\>)(\w+)(\r)(\w+)', line)
  if match: 
    gene = match.group(3)
    myDict[gene[0]] = gene[1]

print myDict
关注者
0
被浏览
86
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    \r不是有效的字符类,我想您打算使用它\s。如果您也不使用它们,则可以减少它们的数量。

    但最重要的是,您需要正确提取组:

    match = re.search(r'>(\w+)\s+(\w+)', line)
    if match:
        tag, gene = match.groups()
        myDict[tag] = gene
    

    通过仅创建 两个 捕获组,我们可以更简单地使用提取这 两个 捕获组.groups()并将它们直接分配给两个变量taggene

    但是,读取FASTA格式似乎表明这是一种多行格式,标签位于一行,其后的基因数据位于
    行。在这种情况下,您本\r应匹配换行符。当您一次读取一行文件时,此功能将无效。

    如果没有这样的正则表达式,则读取该格式会简单得多:

    myDict = {}
    
    with open('d.fasta', 'rU') as fileData:
        tag = None
        for line in fileData:
            line = line.strip()
            if not line:
                continue
            if line[0] == '>':
                tag = line[1:]
                myDict[tag] = ''
            else:
                assert tag is not None, 'Invalid format, found gene without tag'
                myDict[tag] += line
    
    print myDict
    

    这将逐行读取文件,根据起始>字符检测标签,然后读取 行基因信息,将其收集到最近读取的标签下的字典中。

    注意rU模式;我们使用python的通用换行模式打开文件,以处理用于创建文件的换行约定。

    最后但并非最不重要的; 看看BioPy项目;
    他们的Bio.SeqIO模块可以完美处理FASTA以及许多其他格式。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看