0

makeList[start]のインデックスをmakeList[end]に出力しようとしています。開始値と終了値はすべて正しく、合計で約 11 ペアあります。ただし、可能なすべての出力が出力されないため、正しい出力が得られません。なぜそれが起こっているのですか?

def searchPFAM(fname):
   with open(fname,'rb') as f:
       root = etree.parse(f)
       for lcn in root.xpath("/protein/match[@dbname='PFAM']/lcn"):
          try:
             start = int(lcn.get("start"))
             end = int(lcn.get("end"))
             yield start, end
          except (TypeError , ValueError) as e:
             pass 

uniprotID ='Q14591'

def createRef():
    fileInput = open(uniprotID +'.txt','r')
    readAA = fileInput.read()
    store_value = (readAA.partition('\n'))
    aaSequence = store_value[2].replace('\n', '')
    makeList = list(aaSequence)
    return makeList

makeList = createRef()

for start, end in searchPFAM(fname):
    print start, end  
    if start <= end:
        with open('newfile.txt','w') as fileinput:
            while start <= end:
                result = makeList[start]
                fileinput.write(result)
                start += 1
4

2 に答える 2

3

推測ですが、おそらく次のことが必要です。

with open('newfile.txt','w') as fileinput:
    for start, end in searchPFAM(fname):
        print start, end  
        if start <= end:
            while start <= end:
                result = makeList[start]
                fileinput.write(result)
                start += 1

あなたの古いバージョンは、ファイルに開始/終了ループを1つだけ書き込み、それを閉じてから、(古いものと同じ名前の)新しいファイルを開き、開始/終了ループを1つ書き込み、ファイルを閉じます...つまり、あなたはループの繰り返しごとにファイルを書き直しています。

于 2012-07-12T19:54:34.040 に答える
0

最も一般的な理由: スクリプトが終了する前に、出力ファイルをフラッシュする必要があります。

上からのスニペット:

with open('newfile.txt','w') as fileinput:
        while start <= end:
            result = makeList[start]
            fileinput.write(result)
            start += 1
fileinput.flush()
于 2012-07-12T19:47:48.937 に答える