文件输出错误,值正确

时间:2012-07-11 00:42:59

标签: python file list

我的目标是将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) 

3 个答案:

答案 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() 明确关闭文件。