我的目标是将makeList的索引打印到另一个文件。我检查了我的开始和结束值,这是正确的。但是,我的outputFile完全关闭,因为它只在该文件上打印一个字符。
def printOutput(start, end, makeList):
if start == end == None:
return
else:
while start <= end:
print start
print end
outputFile = open('out'+uniprotID+'.txt','w')#file for result output
inRange = makeList[start]
start += 1
outputFile.write(inRange)
答案 0 :(得分:2)
移动线:
outputFile = open('out'+uniprotID+'.txt','w')#file for result output
到while循环之前的行。现在它在while循环的每一次迭代中重新打开文件(作为一个全新的空文件)。
所以代码是:
def printOutput(start, end, makeList):
if start == end == None:
return
else:
outputFile = open('out'+uniprotID+'.txt','w')#file for result output
while start <= end:
print start
print end
inRange = makeList[start]
start += 1
outputFile.write(inRange)
ETA:使用列表切片有一种更简单的方法:
def printOutput(start, end, makeList):
if start == end == None:
return
else:
outputFile = open('out'+uniprotID+'.txt','w')#file for result output
for inRange in makeList[start:end+1]:
outputFile.write(inRange)
答案 1 :(得分:0)
这种情况正在发生,因为您打开文件多次写入。基本上,这会使程序在while
循环的每次迭代中覆盖文件。
要最低限度地修改代码,请使用'a'
标志而不是'w'
标志打开文件。这会以append
模式而不是overwrite
模式打开文件。
但是,这会使您的代码重复打开该文件,这会导致它因磁盘I / O操作需要时间而变慢。相反,更好的方法是打开文件,在while
循环之外写入,然后在里面写入。在代码中:
def printOutput(start, end, makeList):
if start == end == None:
return
else:
outputFile = open('out'+uniprotID+'.txt','w')#file for result output
while start <= end:
print start
print end
inRange = makeList[start]
start += 1
outputFile.write(inRange)
outputFile.close()
答案 2 :(得分:0)
如前所述,问题是输出文件在循环内重复打开。修复是在进入循环之前打开输出文件。
这是另一个版本,使用with
打开您的文件。使用此构造的优点是,当您完成或遇到异常时,它将自动关闭您的文件。
def printOutput(start, end, makeList):
if start == end == None:
return
else:
out_fname = 'out'+uniprotID+'.txt'
with open(out_fname, 'w') as outputFile:
while start <= end:
print start
print end
inRange = makeList[start]
start += 1
outputFile.write(inRange)
否则,您必须记住使用outputFile.close()
明确关闭文件。