如何在不使用range()python的情况下删除文本文档的特定部分

如何在不使用range()python的情况下删除文本文档的特定部分,python,pandas,Python,Pandas,基本上,我得到了一个文本文档,它包含一个大约8行的标题,然后是一堆DNA序列。除了如何从标题中提取DNA序列外,我可以找出解决我的特殊问题所需的所有解决方案。我可以使用 dna = open("dna_sequence.txt").read().split('\n') 他们能够成功地把每一行都放在一个列表中。这就是我想要的。但是,列表中的前8项本质上是垃圾,我需要将它们从列表的其余部分中删除,而不使用like.pop或slice,也不从范围中创建列表 我们唯一可以用来完成这项任务的模块是熊猫,

基本上,我得到了一个文本文档,它包含一个大约8行的标题,然后是一堆DNA序列。除了如何从标题中提取DNA序列外,我可以找出解决我的特殊问题所需的所有解决方案。我可以使用

dna = open("dna_sequence.txt").read().split('\n')
他们能够成功地把每一行都放在一个列表中。这就是我想要的。但是,列表中的前8项本质上是垃圾,我需要将它们从列表的其余部分中删除,而不使用like.pop或slice,也不从范围中创建列表

我们唯一可以用来完成这项任务的模块是熊猫,但我们还没有详细讨论过,我对它不太熟悉。我知道没有这个模块也可以做到

好的,这里的评论提供了更多信息,对不起,我没有包括它,我不知道它会很重要:D

LOCUS: SCU49845
ACCESSION: U49845
ORGANISM: Saccharomyces cerevisiae (baker's yeast)          
AUTHORS: Roemer,T., Madden,K., Chang,J. and Snyder,M.
TITLE: Selection of axial growth sites in yeast requires Axl2p, a novel plasma membrane glycoprotein
JOURNAL: Genes Dev. 10 (7), 777-793 (1996)
PUBMED: 8846915
SOURCE: https://www.ncbi.nlm.nih.gov/nuccore/U49845.1?report=genbank&to=5028
GATCCTCCATATACAACGGTATCTCCACCTCAGGTTTAGATCTCAACAACGGAACCATTGCCGACATGAG
ACAGTTAGGTATCGTCGAGAGTTACAAGCTAAAACGAGCAGTAGTCAGCTCTGCATCTGAAGCCGCTGAA
GTTCTACTAAGGGTGGATAACATCATCCGTGCAAGACCAAGAACCGCCAATAGACAACATATGTAACATA
TTTAGGATATACCTCGAAAATAATAAACCGCCACACTGTCATTATTATAATTAGAAACAGAACGCAAAAA
因此,我将要使用的.txt文档如下所示。有一堆代码行。我需要删除DNA序列上面的部分,所以我只剩下一个DNA序列列表,不管字符串有多长,因为我将在下一部分作业中使用for循环

任务是提取DNA序列并创建一个包含补体的字符串。我可以很容易地使用for循环,因为只有4个核苷酸,它们每个只有1个补体

他明确地说我们可以用熊猫来做,但由于我们还没有过多的讨论,他不希望我们知道如何做,我们可以用python来做

如果我能做dna切片1,9那就简单了,但他说我们做不到。所以我迷路了,回答:

import pandas as pd

df = pd.read_csv(sep="\n", header=None, names = ['code'])

regex = "[^ATCG]+\\b"     # Regex that gets eveything that's not a DNA code.
filter = df['code'].str.contains(regex)
df = df[~filter]          # Keep only the DNA codes.
答:

import pandas as pd

df = pd.read_csv(sep="\n", header=None, names = ['code'])

regex = "[^ATCG]+\\b"     # Regex that gets eveything that's not a DNA code.
filter = df['code'].str.contains(regex)
df = df[~filter]          # Keep only the DNA codes.

如果您只是想获取dna序列,可以使用正则表达式遍历文件:

进口稀土 使用opensomefile作为fh: mydna=[如果重新匹配'^[AGCT]+$',则fh中的行对应于行] mydna ['GATCTCCATACAACGGTATCTCCACTCAGTTAGATCTCAACAGAGAGACATGCCGACATGAG', “acagttaggtatcgtcggagttagcaagctaaacagagcagtagctcagctctgcatctgagccgtgaa”, “GTTCTACTAAGGGTGGATACACACTCGCAAGACAGAACCAGCATAGACATACACACACACACACACATACATATAGTAACATA”, “TTTAGGATACTCGAAATAAACCGCCACTGTCATTATATATATATATAGAACAGAGAAA”] 这样,您就不会忽略任意数量的行,尽管这不是一个具体的答案

要构建补体dna字符串,可以使用字典将碱基映射到补体,并对每个字符串进行迭代,如下所示:

映射={'A':'T','T':'A','C':'G','G':'C'} .getbase“”将返回值或空字符串 mapping.get'A',''将返回'T',而mapping.get'U',''将返回'T' 返回“” 互补项=[.joinmapping.getbase',表示mydna中的dna的dna中的碱基]
如果您只是想获取dna序列,可以使用正则表达式遍历文件:

进口稀土 使用opensomefile作为fh: mydna=[如果重新匹配'^[AGCT]+$',则fh中的行对应于行] mydna ['GATCTCCATACAACGGTATCTCCACTCAGTTAGATCTCAACAGAGAGACATGCCGACATGAG', “acagttaggtatcgtcggagttagcaagctaaacagagcagtagctcagctctgcatctgagccgtgaa”, “GTTCTACTAAGGGTGGATACACACTCGCAAGACAGAACCAGCATAGACATACACACACACACACACATACATATAGTAACATA”, “TTTAGGATACTCGAAATAAACCGCCACTGTCATTATATATATATATAGAACAGAGAAA”] 这样,您就不会忽略任意数量的行,尽管这不是一个具体的答案

要构建补体dna字符串,可以使用字典将碱基映射到补体,并对每个字符串进行迭代,如下所示:

映射={'A':'T','T':'A','C':'G','G':'C'} .getbase“”将返回值或空字符串 mapping.get'A',''将返回'T',而mapping.get'U',''将返回'T' 返回“” 互补项=[.joinmapping.getbase',表示mydna中的dna的dna中的碱基]
好的,只是澄清一下,并展示我得到的答案,以防万一其他人也有同样的问题

我被允许使用re,我和我的教授核实过

但任务是,定义一个函数,这样,如果从文本文件*.txt输入,就会找到所有的DNA序列并提供补充

多亏了你们,还有一些年轻人,我想到了这一点: 我100%肯定它可能会被清理干净,但它要到周一才能到期

import re
def dnaMatching(t):
    with open(t) as n:
        dna = [line for line in m if re.match(r'^[AGCT]+$', line)]
    complement = ""
    for i in dna:
        for x in i:
            if x == 'A':
                complement += 'T'
            elif x == 'G':
                complement += 'C'
            elif x == 'C':
                complement += 'G'
            elif x == 'T':
                complement += 'A'
    return complement

非常感谢你们的帮助

好的,只是澄清一下,并展示我得到的答案,以防万一其他人也有同样的问题

我被允许使用re,我和我的教授核实过

但任务是,定义一个函数,这样,如果从文本文件*.txt输入,就会找到所有的DNA序列并提供补充

多亏了你们,还有一些年轻人,我想到了这一点: 我100%肯定它可能会被清理干净,但它要到周一才能到期

import re
def dnaMatching(t):
    with open(t) as n:
        dna = [line for line in m if re.match(r'^[AGCT]+$', line)]
    complement = ""
    for i in dna:
        for x in i:
            if x == 'A':
                complement += 'T'
            elif x == 'G':
                complement += 'C'
            elif x == 'C':
                complement += 'G'
            elif x == 'T':
                complement += 'A'
    return complement
非常感谢你们的帮助

请添加som

e示例代码和输入如果你的教授说你只能使用熊猫,你应该学会使用熊猫!我不太确定熊猫对DNA序列有什么帮助,但也许我遗漏了什么!包含您的输入文件示例和预期输出以获得更多帮助,并查看以后的帖子。另外,dna=opendna_sequence.txt.readlines[9:]。拆分“\n”将跳过前8行,然后拆分其余的。那么您是否应该专门使用熊猫?请添加一些示例代码和输入如果您的教授说您只能使用熊猫,你应该学会使用熊猫!我不太确定熊猫对DNA序列有什么帮助,但也许我遗漏了什么!包括您的输入文件示例和期望的输出以获得更多帮助,并查看以后的发布。另外,dna=opendna_sequence.txt.readlines[9:]。拆分“\n”将跳过前8行,然后拆分其余的。那么您应该只使用熊猫吗?我不能使用它,它必须适用于任何包含DNA序列的.txt文件。他说我们不能跳过前8行。这就是我迷路的原因。我刚刚更新了一个更好的答案,并且只使用了pandas。如果不使用regex,可以使过滤器像任何不包含分号的行一样简单。但如果熊猫是唯一允许的选项,这基本上就是我捕获单线字段的方法。我不能使用它,它必须适用于任何包含DNA序列的.txt文件。他说我们不能跳过前8行。这就是我迷路的原因。我刚刚更新了一个更好的答案,并且只使用了pandas。如果不使用regex,可以使过滤器像任何不包含分号的行一样简单。但如果熊猫是唯一允许的选项,我基本上会这样做来捕获单线字段。谢谢,我会给他发电子邮件,询问我们是否可以使用其他模块来编写代码。他只提到使用PANDASI是在用RE写答案的过程中。这是我的建议。当使用此方法时,我不断在re.match上得到一个错误,说缺少一个“字符串”位置参数好的,一个问题。因此,作为代码的一部分,我必须将这些字符串转换为它们的互补项,对于每个字符串中不是ACGT的任何项,我必须输出未知的基:{x},但当我将其添加到代码中时,它每行执行一次,因为这会将'\n'附加到everyline。我怎样才能让它删除这些呢?你可以使用字典来映射像d={'a':'T','C':'G'…}这样的值,然后构建一个列表并像这样连接它:。连接[d.getbase',代表dna中的碱基]。漏洞将是你未知的基地。谢谢你,我会给他发电子邮件,询问我们是否可以使用其他模块来编写代码。他只提到使用PANDASI是在用RE写答案的过程中。这是我的建议。当使用此方法时,我不断在re.match上得到一个错误,说缺少一个“字符串”位置参数好的,一个问题。因此,作为代码的一部分,我必须将这些字符串转换为它们的互补项,对于每个字符串中不是ACGT的任何项,我必须输出未知的基:{x},但当我将其添加到代码中时,它每行执行一次,因为这会将'\n'附加到everyline。我怎样才能让它删除这些呢?你可以使用字典来映射像d={'a':'T','C':'G'…}这样的值,然后构建一个列表并像这样连接它:。连接[d.getbase',代表dna中的碱基]。洞将是你未知的基地所在的地方