2016-10-20 1 views
2

그래서 저는 "파이썬을 배우는 것이 힘든 방법"인 연습 20을 진행하고 있습니다. 레슨에서는 파일을 참조하기위한 "seek()"함수를 소개합니다. 이 경우, 우리는이 : 파이썬 : seek (0)과 open()은 본질적으로 같은 일을하고 있습니까?

def rewind(f): 
    f.seek(0) 

추구 호출하는 함수를 생성 (0) 프로그램에 사용 된 파일의 시작 부분에 대한 참조 점을 의미한다. 이제 여러 수업에서 파일을 여는 데 사용할 변수 (이 경우 current_file = open(input_file))를 할당했습니다.

제 질문은, 처음부터 파일을 열어 찾기 (0)를 사용하는 것이 다시 열기 명령을 사용하는 것과 같은지 여부입니다 (예 : open(current_file)). 어떤 차이가 있다면 무엇입니까? 여기에 전체 수업에 대한 코드는 다음과 같습니다

from sys import argv 

script, input_file = argv 

def print_all(f): 
    print f.read() 

def rewind(f): 
    f.seek(0) 

def print_a_line(line_count, f): 
    print line_count, f.readline() 

current_file = open(input_file) 

print "First let's print the whole file:\n" 

print_all(current_file) 

print "Now let's rewind, kind of like a tape." 

rewind(current_file) 

print "Let's print three lines:" 

current_line = 1 
print_a_line(current_line, current_file) 

current_line = current_line + 1 
print_a_line(current_line, current_file) 

current_line = current_line + 1 
print_a_line(current_line, current_file) 
+0

Seek은 파일을 열지 않으며 현재 파일을 되감습니다. 나는 그것이 당신이 의도 한 것이라고 확신하지만 _ "처음부터 (0)"을 사용하여 파일을 열려고합니다. _가 다릅니다. 당신은 명확히 할 수 있습니까? – tdelaney

+1

btw'open (..., "a")'는 파일을 열고 포인터를 파일 끝으로 이동하여 seek (0, 2)를 수행합니다. – furas

+0

FYI : http://sopython.com/wiki/LPTHW_Complaints – jonrsharpe

답변

2

아니, 때문에 귀하의 예제 코드 쇼, 열린 파일 개체입니다 파일 이름open 반면 작품에 seek 작품으로.

f = open('myfile.txt') 
f.seek(5) 

당신은 항상 0 대신에 추구의 파일을 다시 할 수 있지만, 여분의 오버 헤드가 될 것이다 : 차이는 간단한 예제는 명확하게 수, 조금 미묘하다.

+0

여분의 오버 헤드를 넘어, 이름이없는 열린 파일 (아마도 'tempfile.TemporaryFile'의 일부 구현에서와 같이 파일이 열리고 나서 즉시 삭제 되었기 때문에)을 다시 열 수는 없지만 다시 열 수는 있습니다. 스타트. 비슷하게,'gzip.open'과 같은 다른 파일과 유사한 객체의 경우'fileobj.name'에 일반'open'을 호출하면 잘못된 처리기가 있기 때문에 거꾸로 찾는 것과 동일한 동작을하지 못합니다. – ShadowRanger

관련 문제