2012-07-12 114 views
1

我想知道是否有方法可以在創建新的file.txt之前找出有多少對值(開始,結束)。我的目標是檢查我是否開始,結束價值超過一對,然後我想爲每一對創建單獨的文件。如果沒有,那就把它留下。有沒有一種方法可以統計我在產量中有多少值?

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

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

不,你不能用'yield'做到這一點。 – 2012-07-12 21:22:45

回答

4

如果您想爲每對一個文件,你可以做這樣的事情:

for i, (start, end) in enumerate(searchPFAM(fname)): 
    print start, end 
    if start <= end: 
     with open('newfile-%s.txt' % i,'w') as fileinput: 
      text=''.join(makeList[(start-1):(end-1)]) 
      fileinput.write(text) 

希望這會有所幫助。

+0

我不知道你可以像這樣解開嵌套元組。 (+1) – mgilson 2012-07-12 21:27:51

+0

@mouad非常感謝你 – 2012-07-12 21:30:14

+0

@ChadD:很高興這是有幫助:) – mouad 2012-07-12 21:31:15

0

據我所知,沒有辦法做到這一點。你可以只返回一個對象的列表,並把它的長度(或更容易,將返回值轉換到一個列表):

PFAMresults=list(searchPFAM) 
nresults=len(PFAMresults) 
for start,end in PFAMresults: 
    dosomething() 
+1

通過'blah = list(searchPFAM())'更容易完成,而不是修改函數的行爲 – 2012-07-12 21:22:34

+0

@JonClements - 好點。我會更新。 – mgilson 2012-07-12 21:23:37

+0

@JonClements非常感謝你 – 2012-07-12 21:30:33

相關問題