如何在一个python中将多个fastmark转换为多个fastmark?

2024-10-02 14:26:33 发布

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

我有一个像这样的文件(txt或fasta)。每个序列只位于一行中。

    >Line1
    ATCGCGCTANANAGCTANANAGCTAGANCACGATAGAGAGAGACTATAGC
    >Line2
    ATTGCGCTANANAGCTANANCGATAGANCACGAAAGAGATAGACTATAGC
    >Line3
    ATCGCGCTANANAGCTANANGGCTAGANCNCGAAAGNGATAGACTATAGC
    >Line4
    ATTGCGCTANANAGCTANANGGATAGANCACGAGAGAGATAGACTATAGC
    >Line5
    ATTGCGCTANANAGCTANANCGATAGANCACGATNGAGATAGACTATAGC

我要得到一个矩阵,其中每个位置对应于序列的每个字母(核苷酸)。在本例中,矩阵为(5x50)。 我一直在研究新方法。我希望有人能帮我。


Tags: 文件txt序列矩阵fastaline1line2line3
3条回答

如果您使用python中的DNA序列数据,我建议您使用Biopython库。您可以使用pip install biopython安装它。在

以下是您如何达到预期效果:

from Bio import SeqIO
import os
import numpy as np

pathToFile = os.path.join("C:\\","Users","Kevin","Desktop","test.fasta")  #windows machine

allSeqs = []
for seq_record in SeqIO.parse(pathToFile, """fasta"""):
        allSeqs.append(seq_record.seq)

seqMat = np.array(allSeqs)

但是在for循环中,每个seq_record.seq都是一个^{}对象,使您能够灵活地对它们执行操作。在

^{pr2}$

您可以随意分割seqMat数组。在

In [6]: seqMat[0]
Out[6]: array(['A', 'T', 'C', 'G', 'C', 'G', 'C', 'T', 'A', 'N', 'A', 'N', 'A',
       'G', 'C', 'T', 'A', 'N', 'A', 'N', 'A', 'G', 'C', 'T', 'A', 'G',
       'A', 'N', 'C', 'A', 'C', 'G', 'A', 'T', 'A', 'G', 'A', 'G', 'A',
       'G', 'A', 'G', 'A', 'C', 'T', 'A', 'T', 'A', 'G', 'C'], 
      dtype='|S1')

强烈建议你去看看教程!在

实现矩阵的一种方法是读取文件的内容并将其转换为一个列表,其中列表的每个元素都是每个元素中存在的序列线路。和然后你可以访问你的矩阵作为一个二维数据结构。 例如:【ATCGCTANANAGCTANANAGCTANAGTAGCTAANACGAGAGAGACTATAGC,ATCGCTANAGCTANAGTAANAGCACTAGATAGTAGC,ATCGCTANANAGCTANANAGCAGCTAANACGAGAGAGACTATAGC,ATCGCTANAGCTANANAGCTANAGCACTAGATAGTAGC,ATCGCTANAGCTANANAGCAGCTAGACTAGATAGC】

filePath = "file path containing the sequence"

将序列存储为矩阵的列表

^{pr2}$

另一种访问矩阵中每个元素的方法

for seq in range(len(listFasta)):
    for ch in range(len(listFasta[seq])):
        print listFasta[seq][ch]

我希望这段简短的代码能有所帮助。基本上需要将字符串拆分为一个字符数组。然后你就把所有的东西都放到矩阵里。在

Line1 = "ATGC"
Line2 = "GCTA"
Matr1 = np.matrix([n for n in Line1], [n for n in Line2])

Matr1[0,0]将返回矩阵中的第一个元素。在

相关问题 更多 >