我试图一次读取四行的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."
我如何修复它以便我可以将每一行分配给一个字符串,然后将这些字符串写入文本文件中?
答案 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对象。