2013-10-05 2 views
1

나는 거대한 숫자의 파일을 바이너리 형식으로 가지고 있으며, 배열의 일부분 만 파싱해야한다. 내가 numpy.fromfileopen을 들여다 보았지만 파일에서 위치 A에서 위치 B까지 읽을 수있는 옵션이 없습니다. 이 작업을 수행 할 수 있습니까?파이썬 프로그램이 어떻게 파일의 특정 라인을로드하고 읽을 수 있습니까?

+1

물론 할 수 있습니다. 위치 A에 도달 할 때까지 행을 읽고 무시한 다음 위치 B까지 행을 읽고 구문 분석하십시오. –

+0

파일은 스트림입니다. 그걸로 데이터 스트림을 보내지 않으면 무슨 일이 일어나든지 상관하지 마라. –

+0

"숫자의 거대한 파일"이 있으면 비효율적 인 것처럼 보입니다 ... –

답변

2

"거대한 파일"을 다루는 경우라면 이 아닌은 실제로 데이터가 필요한 시점까지 모든 것을 무시합니다.

대신 파이썬의 파일 객체에는 이전에 모든 것을 우회하여 데이터를 효율적으로 파싱해야하는 위치에서 바로 이동할 수있는 .seek() 메서드가 있습니다.

with open('huge_file.dat', 'rb') as f: 
    f.seek(1024 * 1024 * 1024) # skip 1GB 
    ... 

은 참조 : 당신은 당신이 관심있는 데이터의 정확한 위치에 대해 알고 있다면, 당신은 단지 documented의 파일 개체의 seek(<n bytes>) 방법을 사용할 수 있습니다 http://docs.python.org/2/tutorial/inputoutput.html#methods-of-file-objects

+0

그리고 *를 (를) 건너 뛸 곳을 어떻게 알 수 있습니까? 길이가 불규칙한 파일이 있으면 건너 뛸 내용을 알 수 없습니다. –

+0

그래, 그럴 수도 있겠지만 그는 아무 것도 지정하지 않았다. –

+0

내가 의견에 대한 의견을 계속 남기고 투표하는 대신에 투표했습니다. 질문은 대답하기에는 너무 모호합니다. –

1

. 당신이 읽기를 시작하기 전에 한번만 주어진 오프셋 (offset)으로 호출하십시오.

관련 문제