2011-10-17 2 views
0

이것은 잠시 동안 읽었음에도 불구하고 첫 번째 게시물입니다. 저는 파이썬 초보자이며 도움이 필요합니다. 매우 큰 파일 (2 백만 줄 이상)을 처리하고 있지만, 훨씬 더 작은 예 (74513보다는 24 줄)를 보여 드리겠습니다. 그래서 저는 24 줄을 가지고 있다고 가정 해 봅니다. 각 줄은 부동 소수점 숫자를 가지고 있고, 그 다음에 같은 줄에 3 개의 숫자를 넣었고, 다시 24 줄, 3 줄의 줄과 29 줄의 줄이 있습니다.대용량 파일을 처리하는 동안 배열 만들기

56.71739 
56.67950 
56.65762 
56.63320 
56.61648 
56.60323 
56.63215 
56.74365 
56.98378 
57.34681 
57.78903 
58.27959 
58.81514 
59.38853 
59.98271 
60.58515 
-1.00000 
56.09566 
56.05496 
56.02777 
56.00158 
55.98341 
55.96830 
55.99615 
      1   1   1 
56.34692 
56.70977 
57.15187 
57.64234 
58.17782 
58.75118 
59.34534 
59.94779 
-1.00000 
55.47366 
55.42963 
55.39739 
55.36958 
55.35020 
55.33404 
55.36098 
55.47148 
55.71110 
56.07384 
56.51588 
57.00632 
57.54180 
58.11517 
58.70937 
     2   1   1 

은 처음 24 선 배열을 생성하는 것은 매우 쉽습니다 :

import numpy 

def ttarray_tms (traveltimes): 
    '''It defines the 3-D array, organized as I want.''' 
    with open (traveltimes, 'r') as file_in: 
     newarray = file_in.readlines() 
     ttarray = np.array(newarray) 
     ttarray.shape = (2,3,4) 
     ttarray = np.swapaxes(ttarray,1,2) 
     ttarray = np.swapaxes(ttarray,0,2) 
     return ttarray 

은 참고 사항 : 각 숫자 사이에 빈 줄이 없습니다. 그것은 간단한 콜론 - 벡터 파일입니다. 웬일인지 나는 그런 것처럼 게시해야했다. 내가 원하는 것은 기본적으로 29 개 배열을 얻는 것이므로 24 개 라인을 반복하여 배열을 얻은 다음 다음 24 개 라인 (3 개 숫자로 라인을 건너 뛰기, 나는 정말로 필요하지 않음)을 반복하고 get 다른 배열 등등. 내 주요 문제는 어떻게 3 숫자와 라인을 건너 뛰고 새 배열에 대한 새로운 루프를 시작하는 것입니다 생각합니다.

좋은 생각있어?

대단히 감사합니다.

+0

@smone pilia : 게시물의 서식을 조정했습니다. 어려움을 겪고있는 경우, "질문하기"를 클릭하면 (그리고 대답 할 때) 편집 상자 바로 위에 오렌지색 "?"이 나타납니다. 그것을 클릭하면 구문을 알려줍니다. (이 페이지 아래에 오렌지색 '?'가 있으며, 아래는 "Your Answer"비트 바로 아래에 있습니다.) – Thanatos

+0

@cwallenpoole : 파이썬을 들여 줘서 고마워요. 그 비트를 놓쳤습니다. – Thanatos

+0

고마워요! 나는 그것을 앞으로 할 것이다! – eikonal

답변

1

readline()을 사용하면 한 줄을 24 번 읽은 다음 다른 한 줄을 건너 뛰는 등 readline()을 사용할 수 있습니다. 코드와

:

import numpy 

def mk_array(elems): 
    '''Makes the nparray from an array of 24 numbers''' 
    ttarray = np.array(elems) # perhaps [ float(a) for a in elems ] is needed 
    ttarray.shape = (2,3,4) 
    ttarray = np.swapaxes(ttarray,1,2) 
    ttarray = np.swapaxes(ttarray,0,2) 
    return ttarray 

def ttarray_tms(traveltimes): 
    '''It defines the 3-D array, organized as I want.''' 
    arrays = list() 
    with open (traveltimes, 'r') as file_in: 
     ret = "." # force the loop 
     while ret != "": 
      newarray = [ file_in.readline() for i in range(24) ] 
      ret = file_in.realine() 
      if ret != "": # avoid an empty array 
       ttarray = mk_array(newarray) 
       arrays.append(ttarray)  
    return arrays 

테스트하지 않습니다.

+0

나는 그것이 필요하다고 생각하지 않는다. – eikonal

+0

@eikonal 그게 당신의 전화지만, 전체 파일을 읽고 빅 어레이를 처리하는 것이 메모리 적으로 좋은 생각이라고 생각하지 않습니다. –

+0

아마도 파이썬 라인에 무엇을 말하고 있는지 말해 줄 수 있습니까? 아마도 내가 당신의 포인트를 얻지 못했기 때문일 것입니다. – eikonal

0

세 줄의 숫자가 증가하는 패턴을 따르고 있습니다. 그렇다면 마지막 두 숫자를 두 변수로 유지하고 패턴에 해당하는 세 개의 숫자가 해당 변수를 삭제하고 계속해서 그 패턴을 추적하지 않는 이유는 무엇입니까? 이것은 슬라이딩 윈도우 접근법의 일종입니다.

+0

예를 들어 공백으로 시작하는 줄을 건너 뛰는 쉬운 방법이 있습니까? – eikonal

관련 문제