Python: 如何根据二进制内容的文本文件提取DNA序列?
Python: How to extract DNA sequence based on a text file with binary content?
例如我有一个包含以下内容的fasta文件
序列:
>human1
AGGGCGSTGC
>human2
GCTTGCGCTAG
>human3
TTCGCTAG
如何使用python读取包含以下内容的文本文件来提取
序列? 1 代表真,0 代表假。只有值为 1 的序列
将被提取。
示例文本文件:
0
1
1
预期输出:
>human2
GCTTGCGCTAG
>human3
TTCGCTAG
我不熟悉 fasta 文件格式,但希望这对您有所帮助。您可以通过以下方式打开 python 中的文件并提取列表中的有效行条目。
valid = []
with open('test.txt') as f:
all_lines = f.readlines() # get all the lines
all_lines = [x.strip() for x in all_lines] # strip away newline chars
for i in range(len(all_lines)):
if all_lines[i] == '1': # if it matches our condition
valid.append(i) # add the index to our list
print valid # or get only the fasta file contents on these lines
我 运行 它与以下文本文件 test.txt:
0
1
1
1
0
0
1
1
并在打印时得到输出 valid
:
[1, 2, 3, 6, 7]
我认为这会帮助您继续前进,但如果您需要扩展的答案,请在评论中告诉我。
您可以创建一个列表作为您阅读 fasta 文件时的掩码:
with open('mask.txt') as mf:
mask = [ s.strip() == '1' for s in mf.readlines() ]
然后:
with open('seq.fasta') as f:
for i, line in enumerate(f):
if mask[i]:
*something* line
或:
from itertools import izip
for b, line in izip(open(mask_file), open(seq_file)):
if b.strip() == '1':
*something* line
我认为这可能对您有所帮助,我真的认为您应该花一些时间学习 Python。 Python 是生物信息学的好语言。
display = []
with open('test.txt') as f:
for line in f.readlines():
display.append(int(line.strip()))
output_DNA = []
with open('XX.fasta') as f:
index = -1
for line in f.readlines():
if line[0] == '>':
index = index + 1
if display[index]:
output_DNA.append(line)
print output_DNA
这个最好用biopython
from Bio import SeqIO
mask = ["1"==_.strip() for _ in open("mask.txt")]
seqs = [seq for seq in SeqIO.parse(open("input.fasta"), "fasta")]
seqs_filter = [seq for flag, seq in zip(mask, seqs) if flag]
for seq in seqs_filter:
print seq.format("fasta")
你得到:
>human2
GCTTGCGCTAG
>human3
TTCGCTAG
说明
parse fasta: fasta格式可能有几行序列(检查fasta format),最好使用专门的库来读取(解析器)和写入输出
掩码: 我读取掩码文件并转换为布尔值 [False, True, True]
filter:使用zip函数对每个序列匹配他的mask,然后我使用list Comprehensions来过滤
例如我有一个包含以下内容的fasta文件 序列:
>human1
AGGGCGSTGC
>human2
GCTTGCGCTAG
>human3
TTCGCTAG
如何使用python读取包含以下内容的文本文件来提取 序列? 1 代表真,0 代表假。只有值为 1 的序列 将被提取。
示例文本文件:
0
1
1
预期输出:
>human2
GCTTGCGCTAG
>human3
TTCGCTAG
我不熟悉 fasta 文件格式,但希望这对您有所帮助。您可以通过以下方式打开 python 中的文件并提取列表中的有效行条目。
valid = []
with open('test.txt') as f:
all_lines = f.readlines() # get all the lines
all_lines = [x.strip() for x in all_lines] # strip away newline chars
for i in range(len(all_lines)):
if all_lines[i] == '1': # if it matches our condition
valid.append(i) # add the index to our list
print valid # or get only the fasta file contents on these lines
我 运行 它与以下文本文件 test.txt:
0
1
1
1
0
0
1
1
并在打印时得到输出 valid
:
[1, 2, 3, 6, 7]
我认为这会帮助您继续前进,但如果您需要扩展的答案,请在评论中告诉我。
您可以创建一个列表作为您阅读 fasta 文件时的掩码:
with open('mask.txt') as mf:
mask = [ s.strip() == '1' for s in mf.readlines() ]
然后:
with open('seq.fasta') as f:
for i, line in enumerate(f):
if mask[i]:
*something* line
或:
from itertools import izip
for b, line in izip(open(mask_file), open(seq_file)):
if b.strip() == '1':
*something* line
我认为这可能对您有所帮助,我真的认为您应该花一些时间学习 Python。 Python 是生物信息学的好语言。
display = []
with open('test.txt') as f:
for line in f.readlines():
display.append(int(line.strip()))
output_DNA = []
with open('XX.fasta') as f:
index = -1
for line in f.readlines():
if line[0] == '>':
index = index + 1
if display[index]:
output_DNA.append(line)
print output_DNA
这个最好用biopython
from Bio import SeqIO
mask = ["1"==_.strip() for _ in open("mask.txt")]
seqs = [seq for seq in SeqIO.parse(open("input.fasta"), "fasta")]
seqs_filter = [seq for flag, seq in zip(mask, seqs) if flag]
for seq in seqs_filter:
print seq.format("fasta")
你得到:
>human2 GCTTGCGCTAG >human3 TTCGCTAG
说明
parse fasta: fasta格式可能有几行序列(检查fasta format),最好使用专门的库来读取(解析器)和写入输出
掩码: 我读取掩码文件并转换为布尔值 [False, True, True]
filter:使用zip函数对每个序列匹配他的mask,然后我使用list Comprehensions来过滤