1

したがって、私のコードは正常に機能しますが、正しい結果の半分しか出力されません。ファイルにヘッダーを書き込もうとしています。計算を確認して印刷しましたが、これは正しいです。ただし、正しい番号で正しく印刷されたファイルは1つだけで、別のファイルを印刷できませんでした。

lookup[uniprotID] =['177','26','418']

正しく印刷されなかったファイルには、次の情報が含まれていますstart 174 and end 196

そのファイルには、結果として次のようになります。

uniprotID | 3位で

YSADACERD

これが私のコードです。

for i, (start, end) in enumerate(searchPFAM(fname)):

    print start, end
    for item in lookup[uniprotID]:
        item, start, end = map(int, (item, start, end))

        if start <=end:
            if item in xrange(start, end+1):
                print item
                with open('newfile-%s.txt' % i,'w') as fileinput:
                    atPosition = (item)-start
                    result = str(atPosition)
                    fileinput.write(">"+uniprotID+' | at '+result +' position\n')
                    text=''.join(makeList[(start-1):(end)])
                    fileinput.write(text)
            else:
                with open('newfile-%s.txt' % i,'w') as fileinput:
                    fileinput.write(">"+uniprotID+' | '+ 'N/A\n')

                    text=''.join(makeList[(start-1):(end)])
                    fileinput.write(text)
4

2 に答える 2

1

おそらく問題は、open('newfile-%s.txt' % i,'w')書き込み用にファイルを開き、その名前の既存のファイルを上書きすることです。それが問題である場合は、追加するためにそれを開いてみてくださいopen('newfile-%s.txt' % i,'a')

于 2012-07-13T19:24:50.527 に答える
0

MRABが言ったように、同じファイルを数回上書きしている可能性が高いです。withブロックをブロックの外側に引き出してfor item in lookup[...]、ファイルが上書きされないようにします。複数の項目がlookup[unitProtID]if条件に一致する場合、ファイルは複数回書き込まれることに注意してください。

for index, (start, end) in enumerate(searchPFAM(fname)):
    with open('newfile-%s.txt' % index,'w') as fileinput:
        print start, end
        for item in lookup[uniprotID]:
            item, start, end = map(int, (item, start, end)) #You shouldn't be doing this here, you should convert these variables to ints when you first store them in "lookup".
            if start <= item <= end:
                print item
                result = str(item - start)
                fileinput.write(">{0} | at {1} position\n".format(uniprotID, result))
                fileinput.write(''.join(makeList[start-1:end]))
                break #exit loop, move onto next file.
        else:
                fileinput.write(">{0} | N/A\n".format(uniprotID))
                fileinput.write(''.join(makeList[start-1:end]))

fileinput.write(...)それでも問題が発生する場合は、のすべてのインスタンスをに置き換えてprint ...、出力の内容を確認することをお勧めします。

于 2012-07-13T20:05:35.607 に答える