我是编码的新手,在尝试制作自己的fastq masker时遇到了麻烦。第一个模块应该用+远修剪线,将序列标题(以>开头)修改为行号,同时分别保留序列和质量线(A,G,C,T线和Unicode分数) )。
class Import_file(object):
def trim_fastq (self, fastq_file):
f = open('path_to_file_a', 'a' )
sanger = []
sequence = []
identifier = []
plus = []
f2 = open('path_to_file_b')
for line in f2.readlines():
line = line.strip()
if line[0]=='@':
identifier.append(line)
identifier.replace('@%s','>[i]' %(line))
elif line[0]==('A' or 'G'or 'T' or 'U' or 'C'):
seq = ','.join(line)
sequence.append(seq)
elif line[0]=='+'and line[1]=='' :
plus.append(line)
remove_line = file.writelines()
elif line[0]!='@' or line[0]!=('A' or 'G'or 'T' or 'U' or 'C') or line[0]!='+' and line[1]!='':
sanger.append(line)
else:
print("Danger Will Robinson, Danger!")
f.write("'%s'\n '%s'\n '%s'" %(identifier, sequence, sanger))
f.close()
return (sanger,sequence,identifier,plus)
现在提出我的问题。我运行了这个并没有出现错误,但是目标文件是空的。我想知道我做错了什么...这是我处理列表还是缺少.join的方式?如果这是重复,我很抱歉。很简单,我不知道这里的错误是什么。此外,重要提示......这不是一些功课,我只需要一个工作的掩码......任何帮助都非常感谢,所有提到的代码改进都受到欢迎。感谢。
注意(fastq格式):
@SRR566546.970 HWUSI-EAS1673_11067_FC7070M:4:1:2299:1109 length=50
TTGCCTGCCTATCATTTTAGTGCCTGTGAGGTGGAGATGTGAGGATCAGT
+
hhhhhhhhhhghhghhhhhfhhhhhfffffe`ee[`X]b[d[ed`[Y[^Y
编辑:仍然无法得到任何东西,但正在努力。
答案 0 :(得分:1)
您的问题在于您对退货声明的理解。 return x
表示停止执行当前函数并将x
返回给任何调用它的人。在您的代码中,您有:
return sanger
return sequence
return identifier
return plus
当第一个执行(return sanger
)时,函数的执行停止并返回sanger
。第二到第四个返回语句永远不会被评估,最后你的I / O也不会被评估。如果你真的对返回所有这些值感兴趣,请在文件I / O之后移动它,并将它们中的四个打包为元组。
f.write("'%s'\n '%s'\n '%s'" %(identifier, sequence, sanger))
f.close()
return (sanger,sequence,identifier,plus)
这应该至少可以获得文件中的一些输出。无论输出是否符合您想要的格式,我都无法说出来。
编辑:
刚刚注意到您使用的是/n
,可能还需要\n
,所以我在这里修改了答案。
答案 1 :(得分:1)
除了@Brian所说的,你还有各种各样的错误。我猜你的if
和else
测试试图检查line
的第一个字符?你可以用
if line[0] == '@':
etc.
您可能需要尽快编写更多脚本,因此我建议您使用Python Tutorial,以便掌握基础知识。这是值得的。