루프에서 서로 다른 길이의 문자열을 결합 :이 형식에내가이 형식에서 파일을 변환 일하고 있어요
# 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 - 귀하의 의견에 따라 다음 단계가 무엇인지에 대한 근거가 있습니다.
을 기반으로 들여 쓰기가 정확한지 확인해 주시겠습니까?지금은 'RecordNum'이 while 루프 안에서 증가하지 않기 때문에 무한 루프가 있습니다 – Greg
예제에서는 형식이 어떻게 변경되는지 명확하지 않습니다. 새 형식에 대한 구두 설명을 이전 버전에서 제공하십시오. –
길이가 다른 seq1asequence2a의 경우 출력은 어떻게됩니까? –