2013-08-27 3 views
-1

다시 몇 개의 트로 블을 실행합니다. 나는 파일을 다음과 같이 찾고 있습니다위치 목록에서 간격 만들기

chr1 142936580 142936581 209 
chr1 142936581 142936582 208 
chr1 142936582 142936583 212 
chr1 142936583 142936584 210 
chr1 142936588 142936590 215 
chr1 142936590 142936591 217 
chr1 142936591 142936592 221 
chr1 142936592 142936593 220 
chr1 145034453 145034454 222 
chr1 145034454 145034455 220 
chr1 145034455 145034456 218 
chr1 145034456 145034457 215 
chr1 145034457 145034459 216 
chr1 145034459 145034460 212 
chr1 161418656 161418657 178 
chr1 161418657 161418658 177 
chr1 161418658 161418659 179 
chr2 90386745 90386747 222 
chr2 90386747 90386748 221 
chr2 90386748 90386750 220 

여기서 문제가 내 파일에 너무 많은 항목이 있고, 내가 시작을 감소하고자하는 것입니다 : 그게의 최소한의 (a 다음과 같은 방법으로 끝 간격을 가장 좋은 생각은 다음과 같습니다.) 첫 번째 열로 정렬 한 다음 두 번째 열만 사용하여 줄입니다. 이 말은 내 말은, 항목 lis가 142부터 시작하여 최저 및 최고 항목을 시작, 끝 위치로 유지한다는 것입니다. 그런 다음 145 * 위치로 이동하고 동일하게 수행하십시오. 그래서 기본적으로 시각적으로 서로 떨어져있는 항목 집합에 대한 시작, 끝 위치를 만듭니다. 우리는 더 많은 이하 끝날 것 :

chr1 142936580 142936592 
chr1 145034453 145034459 
chr1 161418656 161418658 
chr2 90386745 90386748 

그게 전부가이 작업을 수행하는 방법에 내 생각이었다. 그러나 나는 어떤 코드를 사용해야 할 지 모르겠다. 심지어 제안은 좋은 감사합니다, Irek

+1

질문에 간격을 병합하는 방법이 있으면 [이 질문] (http://stackoverflow.com/q/5679638)을 참조하십시오. 파일을 읽고 쓰는 방법을 알고 있습니까? 지금까지 가지고있는 것을 보여줄 수 있고 정확히 어디에서 붙어 있는지 말해 주면 기꺼이 도와 드리겠습니다. – flornquake

+0

실제로 어떤 것을 시도했는지 보여주는 코드를 제공해야합니다. –

답변

1

내가 이해하면 연속 간격을 결합하려고합니다. 내 제안

from csv import reader 
LIMITINTER= 10 
with open("fichierin.txt") as f: 
    read = reader(f,delimiter="\t") 
    first = last = None 
    for line in read: 
     if last is None: 
      first = last = line 
     else: 
      if abs(int(line[1]) - int(last[2])) < LIMITINTER : 
       last = line 
       continue 
      else: 

       print last[0], first[1], last[2] 
       first = last = line 

    print last[0], first[1], last[2] 

당신은 .... 등

편집을

chr1 142936580 142936593 
chr1 145034453 145034460 
chr1 161418656 161418659 
chr2 90386745 90386750 

당신이 기능과 수율 라인에 넣을 수 있고, 또는 다른 파일에 기록합니다 : 지금 최소화를 차이는 상수입니다

+0

예, 제가 원했던 것보다 훨씬 적습니다. 그러나 여기서 간격은 너무 작습니다. 시작 위치는 서로 더 달라야합니다. chr1 142936580과 142936588은 여전히 ​​서로 너무 가깝습니다. – Irek

+1

이제이 편집으로 매개 변수가 있습니다 –

+0

변경 한 동일한 줄에/10000을 추가했으며 잘 작동합니다. 고마워요 / – Irek

0

할 수 있습니다 파일을 반복하고 일정 범위의 첫 번째와 마지막 번호를 추적. 정수로 변환하여 범위를 추출한 다음 10의 제곱으로 나눌 수 있습니다. 사전을 사용하여 범위의 가장 낮은 값과 가장 높은 값을 저장합니다.