很抱歉标题不好,我不知道该怎么回答我的问题
我写了一个脚本,从fastq文件(纯文本基因组读取文件)中提取数据。每第一行是一个标题,第二行是一个基本字符串-第三和第四行是不需要的
filename = 'C0_GGCTAC_R1_no_adapter_trimming.fastq'
new_filename = filename[:-9] + '_new.fastq'
with open(filename) as f_obj:
file_contents = f_obj.readlines()
extracted_lines = ''
line_count = 0
# Pull header and base lines
for line in file_contents:
line_count += 1
# Headers
if line_count == 1:
extracted_lines += line
# Reads ending in A
elif line_count == 2 and line[-2] == 'A':
extracted_lines += line
# Reads ending in G
elif line_count == 2 and line[-2] == 'G':
extracted_lines += line
# Reset counter
elif line_count == 4:
line_count = 0
with open(new_filename, 'w') as f_obj:
f_obj.write(extracted_lines)
print(new_filename + " was created.")
只要基的读取以A或G结束,脚本就会提取每次读取的头和读取中的基字符串。 输入文件的示例如下:
@HWI-D00461:137:C9H2FACXX:3:1101:1239:1968 1:N:0:GGCTAC
NTGTGTAATAGATTTTACTTTTGCCTTTAAGCCCAAGGTCCTGGACTTGAAACATCCAAGGGATGGAAAATGCCGTATAACAGGGTGGAAGAGAGATTTGA
+
#1=BDDFFHHHFHIJJJJJJJJJJJJJJJJJJJJJIJJIJJJJJHJIIJHGIJJJJJJIHJJBGHJHIIJJJHHHHFFFFEEEDD;?BACDDDA?@CDDDC
@HWI-D00461:137:C9H2FACXX:3:1101:1117:1968 1:N:0:GGCTAC
NAAAGTCTACCAATTATACTTAGTGTGAAGAGGTGGGAGTTAAATATGACTTCCATTAATAGTTTCATTGTTTGGAAAACAGAGGTAATTTTTGATACAGA
+
#1=DDDFDFHHHGHIIGJJJJHIJIHHDIHHIJGGEI@GFGHIHIJHEFHIIIIGIJGHHGECFGIDHGIHIIEGIIJHHEEFFF7?ACEECCBBDEDDDC
输出文件如下所示
@HWI-D00461:137:C9H2FACXX:3:1101:1117:1968 1:N:0:GGCTAC
NAAAGTCTACCAATTATACTTAGTGTGAAGAGGTGGGAGTTAAATATGACTTCCATTAATAGTTTCATTGTTTGGAAAACAGAGGTAATTTTTGATACAGA
@HWI-D00461:137:C9H2FACXX:3:1101:1200:1972 1:N:0:GGCTAC
@HWI-D00461:137:C9H2FACXX:3:1101:1087:1973 1:N:0:GGCTAC
NTAATCCAACTAACTAAAAATAAAAAGATTCAAATAGGTACAGAAAACAATGAAGGTGTAGAGGTGAGAAATCAACAGGATGTTCAGAAGCCTGTGTATGA
尽管它包含了所需的所有数据,但它会拉出每个标题行(以“@”开头),这是不必要的
如果代码是由以a或G结尾的一串基进行的,如何修改代码以只拉出标题行
问题是,您将id添加到每个记录,而不仅仅是您感兴趣的记录。一个快速的解决方案是将id保持在一个变量中,并且只在必要时添加它:
我还不得不说,代码的效率不高,特别是在内存使用方面:您正在将一个(通常)非常大的文件读入内存,但一次只需要一条记录
第二个问题是可以压缩条件,并且可以使用模来了解所处的线型:
在这段代码中,您只在内存中保留一条记录。
line_count
变量包含实际处理的行数,并且您拥有来自输入的所有数据,因此您可以很容易地在以后更改输出我会添加一个额外的细节,我会在每一行中去掉换行符,并在写作时添加它(如果需要):
这样,您的数据是干净的,输入文件中没有新行格式
我认为用4行步骤而不是单行来遍历文件会使您的任务更容易。至少假设真的总是有4条线是彼此的。然后,可以在附加相应的标题行之前过滤所需的基,例如:
相关问题 更多 >
编程相关推荐