2012-07-13 19 views
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) 
+1

'如果項目在xrange(開始,結束+ 1):'應該編碼'如果開始<=項目<=結束:' – mgilson 2012-07-13 19:35:15

回答

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])) 

如果這仍然給你的問題,我建議你print ...取代的fileinput.write(...)每個實例,看看你的輸出怎麼說。

+0

現在我有幾次覆蓋它的問題。有沒有一種方法可以在查找之前查看列表中的任何列表是否匹配 – 2012-07-13 20:22:49

+0

您的代碼中包含「print item」語句。每次打印項目時,這都是來自'lookup'的匹配。 – 2012-07-13 20:27:03

+0

@ChadD:看我的編輯。第一場比賽後,代碼將停止寫入相同的文件。 – 2012-07-13 20:58:13

1

問題也許是open('newfile-%s.txt' % i,'w')打開用於寫入的文件,覆蓋該名稱的任何現有文件。如果這是問題,請嘗試打開它以追加open('newfile-%s.txt' % i,'a')

+0

你是對的a但是有沒有辦法阻止它重寫文件後,它發現它的價值/計算 – 2012-07-13 20:10:23