seek () 함수?


127

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

답변:


234

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

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

구문은 다음과 같습니다.

fp.seek(offset, from_what)

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

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

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

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


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.