2016-07-27 2 views
1

루프에서 서로 다른 길이의 문자열을 결합 :이 형식에내가이 형식에서 파일을 변환 일하고 있어요

# SampleNamea seq1a seq2a 
# SampleNameb seq1b seq2b 
# SampleNamec seq1c seq2c 
# SampelNamed seq1d seq2d 

: 현재

# SampleNamea SampleNameb 0 0 0 0 s s e e q q 1 1 a b s s e e q q 2 2 a b 
# SampleNamec SampleNamed 0 0 0 0 s s e e q q 1 1 c d s s e e q q 2 2 c d 

스크립트를 나는 seq1a 경우 작품이 , seq1b 등은 같은 길이입니다. 그러나 데이터 세트에서 문자열 길이가 다릅니다. 데이터 세트에서 스크립트를 실행하려고하면 IndexError: string index out of range이라는 메시지가 나타납니다. 문자열의 길이를 파악 (즉 seq1aseq2a, seq1bseq2b)는 InputMasterList에 추가 한 것, 추가 제로 년대 OutputMasterList에 함께 SampleName S를 추가

해당 스크립트의 부분이다. 그런 다음 InputMasterList[LineEven] 문자열 ( seq1aseq2a)과 InputMasterList[LineOdd] 문자열 ( seq1bseq2b)의 요소 [0]로 시작하는 각 연속 요소를 선택하고 함께 OutputMasterList으로 그룹화하여 문자열을 OutputMasterList에 추가한다고 가정합니다. 따라서 결과는 ( s s e e q q 1 1 a b s s e e q q 2 2 a b)입니다.

이 스크립트를 다른 문자열 길이로 작동 시키려면 어떻게해야합니까?

LineEven = 0 
LineOdd = 1 
RecordNum = 1 

while RecordNum < (NumofLinesInFile/2): 
    for i in range(len(InputMasterList[LineEven])): 
     if i == 0: 
      OutputMasterList.append(SampleList[LineEven]+'\t'+ SampleList[LineEven]+'\t'+'0'+'\t'+'0'+'\t'+'0'+'\t'+'0'+'\t') 
     OutputMasterList[RecordNum] = InputMasterList[LineEven][i]+'\t'+InputMasterList[LineOdd][i]+'\t' 
    RecordNum = RecordNum + 1 
    LineEven = LineEven + 2 
    LineOdd = LineOdd + 2 

나는 매우 초보자이므로이 코드는 상당히 복잡하지만 도움이 될 것입니다. 내가이 스크립트로 무엇을하려고하는지에 대해 명확히 할 필요가 있다면 주저하지 말고 물어보십시오.

업데이트 : 답장을 보내 주셔서 감사합니다. 귀하의 의견으로 인해 저는 제 질문의 본질을 바꾸어야한다는 것을 깨달았습니다. 내 데이터 세트에서 필자는 스크립트에서 좋아하지 않는 시퀀스가 ​​누락되어 있으며이 누락 된 데이터에 대해 대응하는 것과 동일한 길이의 자리 표시자를 설명해야합니다.

이전 형식 :

# SampleNamea seq1a seq2a 

# SampleNameb '.'  seq2b 

새로운 형식 :

# SampleNamea seq1a seq2a 

# SampleNameb NNNNN seq2b 

가 그럼 난 내 스크립트가 작동합니다 믿습니다!

TL : DR - 귀하의 의견에 따라 다음 단계가 무엇인지에 대한 근거가 있습니다.

+0

을 기반으로 들여 쓰기가 정확한지 확인해 주시겠습니까?지금은 'RecordNum'이 while 루프 안에서 증가하지 않기 때문에 무한 루프가 있습니다 – Greg

+0

예제에서는 형식이 어떻게 변경되는지 명확하지 않습니다. 새 형식에 대한 구두 설명을 이전 버전에서 제공하십시오. –

+4

길이가 다른 seq1asequence2a의 경우 출력은 어떻게됩니까? –

답변

0

InputMasterList [LineOdd] 문자열은 새 업데이트에 따라 (.seq2b)와 유사 할 수 있습니다.

그 전에 추가로 진행하기 전에, 당신은 주

LineOdd 및 LineEven

모두에 대해이 작업을 수행 할 수 있습니다 InputMasterList

if '.' in InputMasterList[LineOdd]: 
    InputMasterList[LineOdd] = InputMasterList[LineOdd].replace('.', 'NNNNN', 1) 

을 체크 할 :이은 새로운 입력

관련 문제