2017-10-13 8 views
0

파이썬에서 파일 내용을 한 줄씩 인쇄하려고 시도했지만 열려있는 파일을 f.seek로 되감습니다. 다음 F : 나는 개방 ("FILE_NAME"를 사용하는 경우 나 F로)이 작업을 수행 할 수 을하지만 : 0)는 파일이 열려있는 ("FILE_NAME"로 열 경우 F로) 내용을 인쇄하기 .seek (0)python에서 open()을 사용한 후 열린 파일을 탐색하여 되감기를 할 수 없습니다.

다음은 내 코드입니다

with open("130.txt", "r") as f:    #f is a FILE object 
    print (f.read())      #so f has method: read(), and f.read() will contain the newline each time 

f.seek(0)        #This will Error! 
with open("130.txt", "r") as f:  #Have to open it again, and I'm aware the indentation should change 
for line in f:      
    print (line, end="")   

f = open("130.txt", "r") 
f.seek(0) 
for line in f: 
    print(line, end="") 

f.seek(0)       #This time OK! 
for line in f: 
    print(line, end="") 

저는 파이썬 초보자입니다. 아무도 말해 줄 수 없나요?

답변

2

첫 번째 f.seek(0) (파일을 인쇄 할되면)

with open("130.txt", "r") as f: 
    print (f.read()) 

는 블록의 끝에서 파일을 닫습니다 때문에

당신은 같은 것을 수행해야합니다 오류가 발생합니다 :

with open("130.txt", "r") as f: 
    print (f.read()) 

    # in with block 
    f.seek(0) 
0

with의 목적은 리소스를 정리하는 경우이 경우에 파일 핸들을 포함 할 것이다 개폐 블록 끝.

당신은하지만,이 같은 with 블록 내에서 .seek 할 수 있어야한다 :

f = open(...) 
try: 
    # use f 
finally: 
    f.close() 

# f is still in scope, but the file handle it references has been closed 
+0

감사합니다 : 귀하의 코멘트에서

with open('130.txt','r') as f: print (f.read()) f.seek(0) for line in f: print (line,end='') 

,이 경우 with는 다음과 같이 대한 문법 설탕입니다! 첫 번째 FILE 개체 ** f **가 사라지 나 없습니까? * type (f) * 가지고있어 : * * 아직 보이는 것. 나를 파이썬으로 전환하기 힘든 시간. – Yifangt

+0

'f'가 여전히 존재하고 파일 핸들을 감싸는 래퍼를 참조 할 것이지만 실제로 래핑 된 핸들은 닫혀있을 것이므로 후속 호출이 이루어지면 실패 할 것입니다. 분명히'f'가'with' 블록으로 범위 화되기를 바랍니다. 그러나 파이썬은 그런 종류의 일로 다소 느슨합니다. – ryachza

+0

내가보기에, 처리기는 여전히 있지만 처리 된 내용이 닫혔습니다. 문제가 해결되었습니다! 고마워요! – Yifangt