1

我正在尝试一次读取四行 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."

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

4

3 回答 3

1

您需要先打开文件

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

您可能想在真正进入 while 循环之前打开它们,但我没有您的其余代码,所以我无法准确地构造它。

于 2013-07-23T23:02:20.487 回答
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>从当前光标位置读取字符。执行 one 后readline(),光标移动到下一个换行符之后,对于 next readline(),它从那里开始读取。所以只需使用readline().

无论如何,我不知道您要达到什么目的。但是代码看起来您​​正在尝试将上下文从 复制fastq_filepractice.text,这可以通过复制文件(使用shutil.copyfile)来完成。

于 2013-07-23T23:06:41.927 回答
-1

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

于 2013-07-23T23:08:44.387 回答