【问题标题】:Python trimming a non-standard segment in a stringPython修剪字符串中的非标准段
【发布时间】:2014-04-26 14:01:31
【问题描述】:

如何从一长串文本中删除标题?

我有一个程序将 FASTA 文件显示为

...TCGATCATCGATCG>IonTorrenttrimmedcontig1$CCGTAGGTGAACCTGCGGAAG...

字符串很大,包含多个这样的标题

所以需要修剪的标题以 > 开头并以 $ 结尾 有多个标头,从 IonTorrenttrimmedcontig1 到 IonTorrenttrimmedcontig25

我怎样才能切掉 > 和 $,删除其间的所有内容,并将前后的代码分隔成单独的列表元素?

该文件是从标准 FASTA 文件中读取的,因此我也很高兴听到有关输入步骤的可能解决方案。

【问题讨论】:

  • 如果答案有帮助,请接受并点赞!干杯:)

标签: python regex list bioinformatics fasta


【解决方案1】:

因为它是 fasta 文件的一部分,所以你要像这样对它进行切片:

>>> import re
>>> a = "TCGATCATCGATCG>IonTorrenttrimmedcontig1$CCGTAGGTGAACCTGCGGAAG"
>>> re.split(">[^$]*\$", a)
['TCGATCATCGATCG', 'CCGTAGGTGAACCTGCGGAAG']

另外,有些人用“>ion1”切片来回答。那是完全错误的!

相信你的问题已经解决了!我也在为这个问题编辑一个带有生物信息学的标签!

【讨论】:

  • 如果您不知道什么是 fasta 文件,并且您的示例是包含 >ion1 的字符串(因为我不想复制/粘贴),那也不是完全错误的。顺便说一句,我使用的正则表达式是">io[^$]*\$",那为什么不行呢? (假设 user3264274 可以做一些工作并将 i 大写以匹配他的示例?
  • 那太具体了,只适用于这种情况!甚至为什么提问者会大写 i?制作坚固耐用且适用于任何事物的东西。顺便说一句,我知道并使用 fasta 文件将近 10 年了 :) 干杯!
  • "字符串很大并且包含多个标题like this" 我不使用fasta文件,所以我不知道结构。但我认为提问者可以做一些工作。我不想给男人一条鱼……虽然从问题来看,很明显是来自>$,你是对的,所以我编辑了我的答案;]
  • 非常感谢您的帮助。看来我还有一些功课要做。完全按照描述工作并为我提供了一个很好的例子,我现在了解如何解决这样的问题。我还为自己输入了一个名字,作为展示/承诺参与这个社区的一种方式!
  • 没问题,@Roeben!欢迎来到 Stackoverflow,这是我们学习和成长的地方 :)
【解决方案2】:

我会为此使用re 模块:

>>> s = "blablabla>ion1$foobar>ion2$etc>ion3$..."
>>> import re
>>> re.split(">[^$]*\$",s)
['blablabla', 'foobar', 'etc', '...']

如果每行有 1 个字符串:

>>> with open("foo.txt", "r") as f:
...   for line in f:
...     re.split(">[^$]*\$",line[:-1])
... 
['blablabla', 'foobar', 'etc', '...']
['fofofofofo', 'barbarbar', 'blablabla']

【讨论】:

    【解决方案3】:

    如果您阅读每一行,有几种方法可以做到这一点。您可以使用分区(分区返回一个包含 3 个元素的列表:[指定字符串之前的文本、指定字符串和之后的文本]):

    for line in file:
        stripped_header = line.partition(">")[2].partition("$")[0]
    

    你可以使用拆分:

    for line in file:
        stripped_header = line.spilt(">")[1].split("$")[0]
    

    您可以遍历字符串中的所有元素,并且仅在您通过“>”之后但在“$”之前附加(但是这几乎不会那么有效):

    for line in file:
        bool = False
        stripped_header = ""
        for char in line:
            if char == ">":
                bool = True
            elif bool:
                if char != "$":
                    stripped_header += char
                else:
                    bool = False
    

    或者使用正则表达式,但我的同龄人似乎已经击败了我!

    【讨论】:

      猜你喜欢
      • 2016-05-12
      • 1970-01-01
      • 2013-05-08
      • 1970-01-01
      • 2011-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多