如何将文件中的行字符读入矩阵?

2024-09-29 02:21:58 发布

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

我有一个序列如下的文件:

>info
ATG
>info
GA
>info
TTAG
>info
ATTTT

我想把它读入矩阵:

matrix[0][0]=A , matrix[0][1]=T, matrix[0][2]=G
matrix[1][0]=G , matrix[1][1]=A
matrix[2][0]=T , matrix[2][1]=T, matrix[2][2]=A , matrix[2][3]=G
ETC...

这在Python(pycharm)中是可能的吗?如果是,我怎么能做到呢?你知道吗

迄今为止的新代码:

def read(sek):
listA=[]
regex = re.compile(r"[;>](?P<description>[^\n]*)\n(?P<sequence>[^;>]+)")
with open(sek, "r") as file:
     seq = regex.findall(file.read())
     for i, info in enumerate(seq):
        description, sequence = info
        for j < len(sequence):
            listA[i][j]= sequence
            j=j+1
        i=i+1
file.close()
return(listA)
read('sequence1.FASTA')

新错误消息:语法错误:无效语法

((原始文件有描述行,但我已经有了解决方案,所以我没有在这个问题中编写它))


Tags: 文件infoforread序列descriptionmatrixseq
3条回答

以下内容将从文本文件加载数据:

def read(sek):
    listA = []
    with open(sek, "r") as file:
        for line1 in file:
            listA.append(list(next(file).strip()))
    return listA

print(read('sequence1.FASTA'))

这将显示以下输出:

[['A', 'T', 'G'], ['G', 'A'], ['T', 'T', 'A', 'G'], ['A', 'T', 'T', 'T', 'T']]

或者,如果您更喜欢使用正则表达式,则以下操作也应该起作用:

def read(sek):
    with open(sek, "r") as file:
        return [list(line) for line in re.findall(r'^([ATGC]+)', file.read(), re.M)]

注意,如果文件很大,第一个版本可以避免一次将整个文件加载到内存中,但速度可能会慢一些。你知道吗

for j < len(sequence):

应该是

while j < len(sequence):

来解决你的语法错误。你知道吗

您可以使用列表:

c = [];
c.append(list("ATG"))
c.append(list("GA"))
c.append(list("TTAG"))
print c[2][1]

您可以这样简单地创建矩阵:

[list(x) for x in open('datafile').read().split("\n")]

>>>> [['A', 'T', 'G'], ['G', 'A'], ['T', 'T', 'A', 'G'], ['A', 'T', 'T', 'T', 'T']]

在代码中,def块需要缩进,就像while、for、if等

相关问题 更多 >