2017-02-05 1 views
1

내 코드는 다음과 같습니다.read()를 코드에 넣으면 작동하지 않는 이유는 무엇입니까? 다음과 같이

input_seq = open("input.txt") 
sequences = input_seq.read() 
output = open("output.txt", "w") 

for dna in input_seq: 
    trimmed = dna[14:] 
    length = len(trimmed) 
    output.write(trimmed) 
    print("processed sequence with length " + str(length)) 

내 질문은 두 번째 줄 "시퀀스 = input_seq.read()"에 관해서입니다. 내 코드에 포함 시키면 제대로 실행되지 않습니다. 코드를 제거하면 코드가 완벽하게 작동합니다.

왜 .read() 행은 모든 것이 제대로 작동하지 않게합니까?

입력이

ATTCGATTATAAGCTCGATCGATCGATCGATCGATCGATCGATCGATCGATCGATC 
ATTCGATTATAAGCACTGATCGATCGATCGATCGATCGATGCTATCGTCGT 
ATTCGATTATAAGCATCGATCACGATCTATCGTACGTATGCATATCGATATCGATCGTAGTC 
ATTCGATTATAAGCACTATCGATGATCTAGCTACGATCGTAGCTGTA 
ATTCGATTATAAGCACTAGCTAGTCTCGATGCATGATCAGCTTAGCTGATGATGCTATGCA 

올바른 출력은

TCGATCGATCGATCGATCGATCGATCGATCGATCGATCGATC 
ACTGATCGATCGATCGATCGATCGATGCTATCGTCGT 
ATCGATCACGATCTATCGTACGTATGCATATCGATATCGATCGTAGTC 
ACTATCGATGATCTAGCTACGATCGTAGCTGTA 
ACTAGCTAGTCTCGATGCATGATCAGCTTAGCTGATGATGCTATGCA 

는 기본적으로 목표는 내 input.txt를 파일의 모든 라인에 공통의 첫 14 개 문자를 제거하는 것입니다.

실행하면 오류 메시지가 나타나지 않지만 실제로는 아무 것도 발생하지 않습니다. output.txt 파일은 비어 있습니다.

+1

에서 모든 입력 파일을 읽을? 오류 메시지가 나타나거나 잘못된 결과를 얻습니까? 항상 QUESTION에 FULL 오류 메시지를 넣으십시오. 그리고 예제 데이터, 잘못된 결과 및 예상 결과. – furas

+0

'sequences'가 아무 것도 사용되지 않았기 때문에 전체 줄을 지울 수도 있습니다. –

+2

'read()'를 사용하면 모든 것을'sequences' 변수로 읽어 들이고 나중에'input_seq'가 파일의 끝에 있고 읽을 것이 없습니다 -'dna in sequence '를 사용하십시오 : – furas

답변

1

, sequences = input_seq.read() 변수에있는 모든 파일 내용을 읽고이 문 후 input_seq 포인트에 파일 끝.
이 두 옵션 중 하나를 사용할 수 있지만 동시에 사용할 수는 없습니다.
첫 번째 옵션

with open('input.txt') as inp_seq, open('output.txt', 'w') as output: 
    for dna in input_seq: 
     trimmed = dna[14:] 
     output.write(trimmed) 
     print("processed sequence with length " + str(len(trimmed))) 

두 번째 옵션 - 당신이 "실패"무엇을 의미합니까 변수 첫번째

with open('input.txt') as inp_seq: 
    sequence = inp_seq.read() 

with open('output.txt', 'w') as output: 
    for dna in sequence: 
     trimmed = dna[14:] 
     output.write(trimmed) 
     print("processed sequence with length " + str(len(trimmed))) 
0

with open() as을 사용하고, open()을 사용하여 파이썬에서 파일을 읽거나 쓰지 마십시오. 이에 대한 자세한 내용은 다른 질문을 검색 할 수 있습니다.

내가 약간의 코드를 수정 한 나는 그것을 테스트 결과는 올바른 :

의견에서 언급 한 바와 같이
sequences = None 
with open('input.txt', 'r') as input_file: 
    sequences = input_file.readlines() 

with open('output.txt', 'w') as output_file: 
    for dna in sequences: 
     output_file.write(dna[14:]) 
     print("processed sequence with length ", len(dna[14:])) 
+0

그게 다 좋고 좋지만 OP의 질문에 대답하지는 않습니다. – martineau

관련 문제