如果我完全按照您的要求进行操作(从每个序列中删除起始N),那么FASTQ file会处于不一致状态.
FASTQ文件的每四行都保留前两行的序列的质量值.因此,如果从序列中删除第一个字符,则还需要从具有质量值的行中删除第一个字符.
您可以在纯Python中做一些非常简单的事情,例如
with open("example.fastq") as f:
for idx, line in enumerate(f.read().splitlines()):
if idx % 2:
print(line[1:])
else:
print(line)
但是,如果您要定期处理生物数据,则确实应该开始使用生物信息学模块,例如BioPython.它会警告您,如果您尝试做的事情会导致文件的形状不一致或不起作用感.
解决方案如下:
from Bio import SeqIO
from Bio import Seq
new_records = []
for record in SeqIO.parse("example.fastq", "fastq"):
sequence = str(record.seq)
letter_annotations = record.letter_annotations
# You first need to empty the existing letter annotations
record.letter_annotations = {}
new_sequence = sequence[1:]
record.seq = Seq.Seq(new_sequence)
new_letter_annotations = {'phred_quality': letter_annotations['phred_quality'][1:]}
record.letter_annotations = new_letter_annotations
new_records.append(record)
with open('without_starting_N.fastq', 'w') as output_handle:
SeqIO.write(new_records, output_handle, "fastq")
哪个输出
@SRR2163140.1 HISEQ:148:C670LANXX:3:1101:1302:1947 length=50
GCGACCTCAGATCAGACGTGGCGACC
+
<(每三行的”字符后面可以有相同的序列标识符和前两行的描述)