当前位置: 首页 > 面试题库 >

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

魏刚豪
2023-03-14
问题内容

我有一个采用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

问题答案:

\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以及许多其他格式。



 类似资料:
  • 我试图将js代码转换为java版本,但对正则表达式有点困惑:在js中,我有一个类似于:testString的表达式。拆分(“/(\w*\d)/g”) 我可以在java中使用什么等效语言?我试着用匹配器得到同样的结果。find()和split函数,但结果不一样。

  • 问题内容: 我目前正在将Web应用程序代码从PHP移植到JS。 我对此正则表达式有疑问。从PHP 这样使用 如何将其转换为在JS上工作? 先感谢您 问题答案: 没什么特别的。PHP regex语法与JavaScript中的语法非常相似: 您可以从 MDN的 本手册中找到有关JavaScript 中正 则表达式的更多信息:https : //developer.mozilla.org/en- US/

  • 问题内容: 我正在设计HTML和JavaScript中的正则表达式测试器。用户将输入一个正则表达式,一个字符串,并通过单选按钮选择要测试的函数(例如,搜索,匹配,替换等),并且当该函数以指定的参数运行时,程序将显示结果。自然地,会有额外的文本框来替换额外的参数。 我的问题是从用户那里获取字符串并将其转换为正则表达式。如果我说他们不需要在输入的正则表达式中包含,则他们不能设置标志,例如和。因此,它们

  • 问题内容: 我明白了为什么使用正则表达式的字符串转换一样没有给出所需的输出到这反而给了。我可以用String.substring做一些事情,或者只是替换最后一个字符,但是我认为有一种更好的解决方案。 这是代码: 问题:正在寻找一种更整洁的方式来获得所需的输出? 问题答案: 看到这个问题,从番石榴 就您而言,类似:

  • 问题内容: 如何将某些文本转换为链接?回到PHP中,我使用了这段代码,该代码非常适合我的目的: 我尝试使用Python,但是无法使其正常工作。如果有人可以将其转换为Python :)。 问题答案: 下面的代码是对python的简单翻译。您应该确认它确实可以满足您的要求。有关更多信息,请参见Python正则表达式HOWTO。 这是我最后的输出:

  • 问题内容: 我需要替换字符串的一部分。我浏览了Python文档并发现了re.sub。 我期望这能打印,而不是“酒吧”。 谁能告诉我我做错了什么? 问题答案: 除了捕获要 替换 的零件外,您还可以捕获要 保留 的零件,然后使用引用对其进行引用以将它们包括在替换字符串中。 尝试以下方法: 另外,假设这是HTML,则应考虑使用HTML解析器来执行此任务,例如Beautiful Soup 。