2012-07-12 2 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

아니요. '수확량'으로는 그럴 수 없습니다. –

답변

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

+0

@mouad 매우 고마워요 –

+0

@ChadD : 다행스럽게도 도움이되었습니다 :) – mouad

0

내가 아는 한, 그렇게 할 방법이 없습니다. 각 쌍에 대한 파일을 원하는 경우

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

함수의 동작을 수정하는 것보다'blah = list (searchPFAM())'이 더 쉽게 할 수 있습니다. –

+0

@JonClements - 좋은 지적입니다. 나는 갱신 할 것이다. – mgilson

+0

@JonClements 대단히 감사합니다. –

관련 문제