2013-07-23 2 views
1

한 번에 4 줄의 fastq 파일을 읽으려고합니다. 파일에는 여러 줄이 있습니다. 나는 내 코드에 넣어하지만,이 얻을 :한 번에 4 줄 읽음

Traceback (most recent call last):

File "fastq.py", line 11, in

line1 = fastq_file.readline()

AttributeError: 'str' object has no attribute 'readline'

이 내 코드입니다 :

import Tkinter, tkFileDialog #asks user to select a file 

root = Tkinter.Tk() 
root.withdraw() 

fastq_file = tkFileDialog.askopenfilename() 

if fastq_file.endswith('.fastq'): #check the file extension 
    minq = raw_input("What is your minimum Q value? It must be a numerical value.") #receives the minimum Q value 
    while True: 
     line1 = fastq_file.readline() 
     if not line1:break 
     line2 = fastq_file.readline(2) 
     line3 = fastq_file.readline(3) 
     line4 = fastq_file.readline(4) 

    txt = open(practice.text) 
    txt.write(line1) #puts the lines into the file 
    txt.write("\n") 
    txt.write(line2) 
    txt.write("\n") 
    txt.write(line3) 
    txt.write("\n") 
    txt.write(line4) 
    txt.write("\n") 
    print "Your task is complete!" 

else: 
    print "The file format is not compatible with the FastQ reader program. Please check the file and try again." 

내가 그 쓰기 다음 문자열로 각 라인을 할당 할 수 있도록 나는 그것을 해결하는 것입니다 방법 텍스트 파일의 문자열?

+1

'fastq_file'을 어떻게 정의합니까? Lemme 전체 코드를 참조하십시오. – rnbcoder

+1

'fastq_file'은 여러분이 생각하는 것과 다릅니다. 파일 이름을 가지고있는 것처럼 보였으므로 아직 열지 않으므로 'fastq_file'은 단지 문자열입니다. 그러나 'fastq_file'이 정의 된 곳을 보지 않고는 알 수 없습니다. –

+0

또한 어디서나 멀티 스레딩을 언급하지는 않습니다. 해당 질문에 실제로 적용되지 않는 경우 태그를 해제하십시오. –

답변

1

당신은

while True: 
    with open(fastq_file) as fastq_file_open: 
     line1 = fastq_file_open.readline() 
당신은 아마 당신이 실제로 while 루프에 도착하기 전에를 열려면

먼저 파일을 열어야합니다,하지만 난 코드의 나머지 부분이없는, 그래서 나는 할 수 없습니다 그것을 정확히 구조화하십시오.

+0

'while True :'부분을 얻지 못했습니다. 이 코드는 1 행을 영원히 열어 놓고 읽습니다. – tdelaney

+0

지금 모든 질문에 내 코드를 추가했습니다. 내가 어떻게 고칠 수 있니? 죄송합니다, 이것이 제 첫 프로그램입니다. – user2612453

1

이와 같이 파일을 열어야합니다.

fastq_file = open("fastq_file","r") 

그런 다음 코드를 실행하십시오.

또한.

그런데
txt = open("practice.text","w") # you have to pass a string and open it in write mode. 

, 당신은 readline(<number>)를 사용할 필요가 없습니다, 그것은 단지 현재 커서 위치에서 <number> 문자를 읽습니다. readline()을 실행 한 후 커서는 다음 줄 바꿈 문자 다음으로 이동하고 다음 문자 인 readline()에 대해 읽습니다. 따라서 readline()을 사용하십시오.

어쨌든 나는 당신이 성취하려는 것을 모른다. 그러나 코드는 fastq_file에서 practice.text으로 컨텍스트를 복사하려고 시도하는 것처럼 보입니다.이 파일은 (shutil.copyfile을 사용하여) 파일을 복사하여 수행 할 수 있습니다.

+0

질문에 지금 모든 코드를 추가했습니다. 내가 어떻게 고칠 수 있니? 죄송합니다, 이것이 제 첫 프로그램입니다. – user2612453

+0

여전히 명확하지 않습니다. 코드는'practice.txt'에 파일을 복사하는 것처럼 보입니다.나는 당신에게 묻습니다. 매 루프마다 네 줄을 읽는 것이 중요합니까? – rnbcoder

-1

무엇이 fastq_file입니까? 귀하의 코드가 올바르지 않습니다. fastq_file이 파일 디스크립터 인 경우에는 str 객체가 될 수 없습니다.

+0

이것은 설명이 아니라 대답입니다. 다음 번에 원래 질문에 대해 의견을 말하십시오. –

관련 문제