我想从输入文件中提取字符串,如下所示:
>a11
UCUUUGGUUAUCUAGCUGUAUGA
>a11
UCUUUGGUUAUCUAGCUGUAUGA
>b22
UGGUCGACCAGUUGGAAAGUAAU
>b22
ACUUCACCUGGUCCACUAGCCGU
>b22
AGGUUGUCUGUGAUGAGUUCG
>t33
UUAAUGCUAAUCGUGAUAGGGGU
>t33
CAGUAACAAAGAUUCAUCCUUGU
该行以">"开头是一个标题,下面的行是一个序列。
我想用"> b22"
提取带有标题的序列。这是我的代码,没有给出正确答案。
def extractData():
filename = ("data.txt")
infile = open(filename,'r')
for x in infile.readlines():
x = x.strip()
if x.startswith(">"):
header = x
else:
sequence = x
if header.startswith(">b22"):
print(header, sequence)
infile.close()
extractData()
它给出了这样的结果:
>b22 UCUUUGGUUAUCUAGCUGUAUGA
>b22 UGGUCGACCAGUUGGAAAGUAAU
>b22 UGGUCGACCAGUUGGAAAGUAAU
>b22 ACUUCACCUGGUCCACUAGCCGU
>b22 ACUUCACCUGGUCCACUAGCCGU
>b22 AGGUUGUCUGUGAUGAGUUCG
但是,我的预期结果是这样的:
>b22 UGGUCGACCAGUUGGAAAGUAAU
>b22 ACUUCACCUGGUCCACUAGCCGU
>b22 AGGUUGUCUGUGAUGAGUUCG
有人可以解决这个问题吗?什么问题,我应该用什么来表达正确的结果呢?
答案 0 :(得分:2)
代码中的细微更改:
def extractData():
filename = ("data.txt")
infile = open(filename,'r')
for x in infile.readlines():
x = x.strip()
if x.startswith(">"):
header = x
else:
sequence = x
if header.startswith(">b22"):
print(header, sequence)
header = ''
infile.close()
extractData()
顺便说一下,您可以使用调试器来识别程序流程的错误。如果您是Python新手,那么我建议使用Eclipse和Pydev插件进行交互式调试。 Link for Tutorial on Pydev in Eclipse
话虽如此,出现问题是因为正在为从文件解析的每一行评估if header.startswith(">b22")
。当你在else
块内移动它时,它只会在你完成解析序列后进行评估(显然它不会评估header
行)。
答案 1 :(得分:1)
这是一种不同的方法:
>>> with open('data.txt') as f:
... for line in f:
... if line.startswith('>b22'):
... print('{0} {1}'.format(line.strip(), next(f).strip()))
...
>b22 UGGUCGACCAGUUGGAAAGUAAU
>b22 ACUUCACCUGGUCCACUAGCCGU
>b22 AGGUUGUCUGUGAUGAGUUCG
由于文件可以迭代,当你到达>b22
的行时,你可以使用next()
来读取下一行。