一次读4行

时间:2013-07-23 22:58:16

标签: python file-io lines fastq

我试图一次读取四行的fastq文件。文件中有几行。但是当我输入我的代码时,我得到了这个:

  

追踪(最近一次呼叫最后一次):

     

文件“fastq.py”,第11行,

     

line1 = fastq_file.readline()

     

AttributeError:'str'对象没有属性'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."

我如何修复它以便我可以将每一行分配给一个字符串,然后将这些字符串写入文本文件中?

3 个答案:

答案 0 :(得分:1)

您需要先打开文件

while True:
    with open(fastq_file) as fastq_file_open:
        line1 = fastq_file_open.readline()

你可能想在实际进入while循环之前打开它们,但是我没有剩下的代码,所以我不能完全构造它。

答案 1 :(得分: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)。

答案 2 :(得分:-1)

什么是fastq_file?你的代码不正确。如果,fastq_file是文件描述符,则它不能是str对象。