seek () 함수?


127

여기에서 내 혼란을 용서하십시오.하지만 파이썬에서 seek () 함수에 관한 문서를 읽었습니다 (사용해야 함). 도움이되었지만 실제로 수행하는 작업의 실제 의미에 대해 약간 혼란 스럽습니다. 감사합니다, 감사합니다.

답변:


234

에 관해서는 seek()너무 걱정할 것이 없습니다.

우선 열린 파일을 조작 할 때 유용합니다.

구문은 다음과 같습니다.

fp.seek(offset, from_what)

fp작업중인 파일 포인터는 어디에 있습니까 ? offset얼마나 많은 위치를 이동할 것인지를 의미합니다. from_what참조 포인트를 정의합니다.

  • 0 : 참조 점이 파일 의 시작 임을 의미합니다.
  • 1 : 기준점이 현재 파일 위치 임을 의미합니다.
  • 2 : 참조 점이 파일 의 끝임 을 의미합니다.

생략하면 from_what기본값은 0입니다.

파일을 관리 할 때 항상 현재 작업중인 파일 내 위치가 있다는 것을 잊지 마십시오. 방금 열면 해당 위치가 파일의 시작이지만 작업하면서 진행할 수 있습니다. 이동하는 경로처럼 열려있는 파일
seek을 walk따라야 할 때 유용합니다 .


115
난 당신이 아마 상수를 사용해야 함을 추가 할 있지만, 두 번째 매개 변수를 설명하는 일 os.SEEK_SET, os.SEEK_CUR하고 os.SEEK_END대신 마법의 숫자를 0, 1그리고 2각각.
— ArtOfWarfare 2014

탐색 위치는 배열 인덱스와 유사한 파일 내용에 대한 바이트 인덱스입니다. 추가 모드 'a'에서 파일을 열면 파일의 시작 부분을 찾을 수 없다는 것도 흥미 롭습니다.
— anilmwr

3
실제로 추가 모드의 경우 fp.seek (0, 0)을 사용하여 파일의 시작을 찾을 수 있지만 해당 파일에 쓰려고하면 탐색이 다시 파일의 끝으로 재설정되고 내용이 끝에 기록됩니다. .
— anilmwr

1
감사합니다-새로운 것을 배웠고 명확하게 설명 된이 답변을 한 번만 읽어야했습니다
— Adam Hughes

파일 시작 부분에서 검색을 호출 할 때 실제로 매번 파일 시작 부분부터 '검색'을 시작합니까?
— Theo Stefou

40

파일을 열면 시스템은 파일의 시작 부분을 가리 킵니다. 읽기 또는 쓰기는 처음부터 발생합니다. seek()파일의 다른 부분에 포인터를 읽거나 그 장소에서 쓰기 수 있음을 조작 이동합니다.

따라서 전체 파일을 읽으려면 처음 20 바이트를 건너 뛰고 파일을 열고 seek(20)읽기를 시작할 위치로 이동 한 다음 파일을 계속 읽으십시오.

또는 10 번째 바이트마다 읽고 싶다면 seek(9, 1)(현재 위치를 기준으로 9 바이트 앞으로 이동), read(1)(1 바이트 읽기) 반복 하는 루프를 작성할 수 있습니다.


14
-1 :이 대답은 두 번째 매개 변수를 설명하지 못하며 실제로는 두 번째 매개 변수가 읽는 바이트 수를 나타내는 것처럼 들립니다.
— ArtOfWarfare 2014

3

seek의으로 기대할 함수는 오프셋 (바이트).

Ascii 파일 예 :

따라서 다음 내용이 포함 된 텍스트 파일이있는 경우 :

simple.txt

abc

다음과 같이 1 바이트 를 건너 뛰어 첫 번째 문자를 건너 뛸 수 있습니다 .

fp = open('simple.txt', 'r')
fp.seek(1)
print fp.readline()
>>> bc

폭을 수집하는 바이너리 파일 예제 :

fp = open('afile.png', 'rb')
fp.seek(16)
print 'width: {0}'.format(struct.unpack('>i', fp.read(4))[0])
print 'height: ', struct.unpack('>i', fp.read(4))[0]

참고 : 전화를 걸면 read읽기 헤드의 위치가 변경 seek됩니다.


0

문자열의 경우 WHENCE를 사용하지 마십시오. 파일 시작 위치에 f.seek (0)을 사용하고 파일 끝 위치에 f.seek (len (f) +1)을 사용하십시오. open (file, "r +")을 사용하여 파일의 아무 곳에서나 읽고 쓸 수 있습니다. "a +"를 사용하면 커서 위치에 관계없이 파일 끝에 쓰기 (추가) 만 가능합니다.


파일이나 문자열에 대해 이야기하고 있습니까?
— RalfFriedl 2011

혼란을 드려 죄송합니다. 파일에 관한 모든 것입니다.
— Gordon Graham
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.