1

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

3 回答 3

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)
于 2012-07-11T00:46:28.873 回答
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()
于 2012-07-11T00:50:32.757 回答
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()

于 2012-07-11T00:52:56.153 回答