1

私の目標は、makeList のインデックスを別のファイルに出力することです。開始値と終了値を確認しましたが、正しいことがわかりました。ただし、そのファイルには1文字しか出力されないため、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

すでに述べたように、問題は出力ファイルがループ内で繰り返し開かれることでした。修正は、ループに入るに出力ファイルを開くことです。

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 に答える
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 に答える