我有一个包含这样的序列的文件:
>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:语法无效
((原始文件有描述行,但我已经有了解决方案,所以我没有在这个问题中写过它))
答案 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):
解决语法错误。