如何从文件中读取行的字符到矩阵?

时间:2015-10-16 14:42:05

标签: python regex

我有一个包含这样的序列的文件:

>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')

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

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

3 个答案:

答案 0 :(得分:0)

您可以使用list:

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等。

答案 1 :(得分:0)

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

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)]

注意,如果文件很大,第一个版本会避免一次将整个文件加载到内存中,但可能会更慢。

答案 2 :(得分:0)

for j < len(sequence):

应该是

while j < len(sequence):

解决语法错误。