2013-06-19 6 views
0

코딩에 익숙하지 않아 내 자신의 fastq 마스킹을 시도하는 중에 문제가 발생했습니다. 첫 번째 모듈은 + 거리를 사용하여 줄을 잘라내고 순서 및 품질 줄 (각각 A, G, C, T 줄 및 유니 코드 점수)을 유지하면서 시퀀스 번호를 줄 번호 (>로 시작)에서 줄 번호로 수정합니다. .하나의 텍스트 파일에 여러 개의 목록 통합하기

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 

편집 : 아직도 아무것도 얻을 수 없습니다,하지만 작업입니다.

+1

[biopython] (http://biopython.org/wiki/SeqIO)을 살펴보아야합니다. – root

+1

'if'와'else' 문에서 당신이 테스트하고 싶은 것이 확실하지 않지만 가지고있는 코드는 확실히 테스트하지 않을 것입니다. – alexis

+0

나는 'if'@ '== [0] in line과 같이 생각한다 : line [0] =='@ ':'인 경우 의도 된 것이었지만 확실하지 않다. – Brian

답변

1

반환 문제에 대한 이해가 문제입니다. return x은 현재 함수 실행을 중단하고 누가 호출했는지를 x에게 알려줍니다. 당신의 코드에서, 당신은 :

return sanger 
return sequence 
return identifier 
return plus 

함수의 첫 번째 실행하는 (return sanger) 실행이 중지되고 sanger이 반환됩니다. 두 번째에서 네 번째까지 return 문은 평가되지 않으며 결국에는 I/O 작업도 수행하지 않습니다. 이러한 모든 값을 반환하는 데 정말로 관심이 있다면 파일 I/O 뒤에이 값을 옮기고 그 중 네 개를 튜플로 묶어서 반환하십시오.

f.write("'%s'\n '%s'\n '%s'" %(identifier, sequence, sanger)) 
f.close() 
return (sanger,sequence,identifier,plus) 

파일에서 적어도 일부 출력을 가져와야합니다. 그 출력이 원하는 형식이든 아니든, 나는 정말로 말할 수 없습니다.

편집 : 그냥 /n을 사용하고 있고 아마도 \n을 원했기 때문에 여기서 내 대답을 변경했습니다.

+0

튜플에 대한 아이디어를 가져 주셔서 감사합니다 ... 또한 출력이 없습니다. – Fabien

1

@Brian이 처리 한 것 이상의 모든 종류의 오류가 있습니다. ifelse 테스트가 line의 첫 번째 문자를 확인하려고합니다. 당신은

if line[0] == '@': 
    etc. 

와 함께 당신은 아마 곧 더 스크립트를 작성해야한다는 점 할 거라고, 그래서 당신은 그래서 당신이 기초 위에 얻을 수있는 Python Tutorial를 통해 작업하는 것이 좋습니다. 그것은 당신의 가치가있을거야.

관련 문제