Python:将fastq文件转为fasta文件

fastq格式如下:

@HWI-ST1276:71:C1162ACXX:1:1101:1208:2458 1:N:0:CGATGT
NAAGAACACGTTCGGTCACCTCAGCACACTTGTGAATGTCATGGGATCCAT
'+'
@#55???BBBBB?BA@DEEFFCFFHHFFCFFHHHHHHHFAE0ECFFD/AEH

第一行是序列标识(read ID)以及相关的描述信息,以“@” 开头;
第二行即为碱基序列,长度由测序策略决定;如SE50
第三行以“+”开头,后面是序列标示符、描述信息,或者什么也不加;
第四行是测序质量值(phred),与第二行一一对应,phred值以ASCII码标记,对应的 ASCII 值减去33,即为第二行对应碱基的测序质量值。
Illumina测序标识详细信息如下:

HWI-ST1276 Instrument – unique identifier of the sequencer 测序仪识别号
71 run number – Run number on instrument 机器运行编号
C1162ACXX FlowCell ID – ID of flowcell flowcell编号
1 LaneNumber – positive integer Lane编号;1个flowcell有8条lane
1101 TileNumber – positive integer Tile编号;1条lane有两列,每列有32个tile
1208 X – x coordinate of the spot. Integer which can be negative 点的x坐标
2458 Y – y coordinate of the spot. Integer which can be negative 点的y坐标
1 ReadNumber - 1 for single reads; 1 or 2 for paired ends 单端或双端
N whether it is filtered - NB:Y if the read is filtered out, not in the delivered fastq file, N otherwise 是否过滤,Y表示被过滤,否则为N
0 control number - 0 when none of the control bits are on, otherwise it is an even number 0表示十进制?否则是一个偶数
CGATGT Illumina index sequences 一个flowcell中不同样品,需要index区分

一个样品的双末端测序结果中,同一条insert sequence 的两条reads的ID只有ReadNumber是不一样的,要么为1,要么为2;所有reads只有X – x coordinate of the spot是不断变化的。

fasta格式如下:

>XM_011525358.1 PREDICTED: Homo sapiens forkhead box N1 (FOXN1), transcript variant X2, mRNA
AGCTTCTTAGTCACCTTTCTCTTCTCCCCGTTTTGGCGCAGCCCCTCCGGGCAAGGGGAAGCTGATATCATAATTATTGGCTCACCTGGCAGCTGCCTCCCCTCACCTGATGTCAGCACAGACACAGGACGGCCGAGCTG

第一行是一个大于号开头,后面紧接注释信息,比如序列的名字,编号等。
第二行开始就是纯序列部分。

代码如下:

import time
start = time.time()
import glob
import gzip
for i in glob.glob('*.fastq.gz'):
    with gzip.open(i,'rt') as fp:
        output_fasta = open("%s.fa"%i[:-9],'w') 
        i = 0 
        for line in fp:
            i += 1
            if i % 4 == 1: 
                line_new = line[1:]
                output_fasta.write('>'+line_new) 
            elif i % 4 == 2: 
                output_fasta.write(line)
        output_fasta.close()
end = time.time()
print("used %s s" % str(end - start))

你可能感兴趣的:(Python:将fastq文件转为fasta文件)