2016-09-29 6 views
1

저는 파이썬에서 초보자입니다. 그러나 readline() 메서드를 사용하려고하면 몇 가지 문제가 발생합니다.) (파이썬에서 readline() 리턴에 대해 혼란스러워합니다.

aaaaaaaaa 
bbbbbbbbb 
ccccccccc 

그것은이 작성한 Readline을 보인다 :

f=raw_input("filename> ") 
a=open(f) 
print a.read() 
print a.readline() 
print a.readline() 
print a.readline() 

내 txt 파일 내가 맥 터미널에서 실행하려고 할 때, 나는이있어, 그러나

aaaaaaaaa 
bbbbbbbbb 
ccccccccc 

입니다 전혀 작동하지 않습니다. 그러나 print.a()를 비활성화하면 readline()이 다시 작동합니다.

이렇게 많이 혼란 스럽습니다. read()와 readline()을 동시에 사용할 수있는 솔루션이 있습니까?

+7

'read()'는 모든 것을 읽습니다 (또는 시도 할 것입니다). 그 후, 당신은 당신의 파일'a'의 끝에 도달했습니다, 그래서'readline()'으로 읽을 것이 없습니다. – Evert

+0

@ cricket_007 아마도 나쁜 키보드 나 나쁜 안경의 결과 일 것입니다. – Evert

+1

'a.read()'와 첫 번째'a.readline()'사이에서'a.seek (0)'을 할 수 있습니다. 왜 그렇게하고 싶지는 모르겠다. – DeepSpace

답변

5

파일을 열면 파일의 일부 위치에 대한 포인터가 나타납니다 (기본적으로 : 시작). 당신이 .read() 또는 .readline()이 포인터 이동을 실행 할 때마다 지금 :

  1. .read() 파일이 끝날 때까지 읽고 끝으로 포인터를 이동 (모든 읽기에 따라서 추가 호출은 아무 것도 제공하지 않습니다) 줄 바꿈 때까지
  2. .readline()
  3. 읽기 볼과 당신이 수동으로 페이지를 이동할 수 있습니다하고자하는 경우는
  4. .read(X)은 X 바이트를 읽고 CURRENT_LOCATION + X에서 포인터를 설정 한 후 포인터 (또는 끝)

을 설정 o X이 파일의 위치 (바이트 배열로 표시됨) 인 a.seek(X) 호출을 실행하여 예를 들어 원하는 출력을 제공해야합니다.

print a.read() 
a.seek(0) 
print a.readline() 
print a.readline() 
print a.readline() 
1

파일 포인터의 개념을 이해해야합니다. 파일을 읽을 때 파일은 완전히 소모되고 포인터는 파일의 끝에 있습니다.

readline()이 전혀 작동하지 않는 것으로 보입니다.

예상대로 작동합니다. 읽을 줄이 없습니다.

print a.read()를 비활성화하면 readline()이 작동합니다.

포인터가 파일의 시작 부분에, 그리고 선이

동시에 어떤 내가 읽은 사용할 수있는 솔루션()과의 readline()가 거기에

를 읽을 수 있기 때문에

?

확실히. 몇 줄을 읽은 다음 파일의 나머지 부분을 뒤집거나 파일 포인터를 원하는 위치로 되 돌리는 순서를 바꿉니다.당신이 그것을

+2

나는 뭔가를 닫는 것을 잊어 버리는 것에 대해 이야기하는 문장을 닫지 않았다는 것을 잊어 버리는 것이 재미 있다는 것을 안다 :-) (마침표로 닫는다.) –

0

에게 파일 객체 a이 파일의 위치의 기억을 읽는 완료되면 또한

는 파일을 닫습니다하는 것을 잊지 마세요.
  • a.read()

    (다음의 위치를 ​​이동
  • a.readline()는 라인의 끝에 현재 위치로부터 판독한다 (파일의 끝에 위치 이동)하여 파일의 끝 현재 위치로부터 판독 줄)
  • a.seek(n)은 파일에서 아무 것도 반환하지 않고 위치 n으로 이동합니다 (아무 것도 반환하지 않음).
  • a.tell()은 파일의 위치를 ​​반환합니다.

그래서 먼저 readline을 호출 해보십시오. 이제 read 호출은 readline을 호출 한 횟수에 따라 전체 파일, 나머지 라인 (아마도 none)을 반환하지 않음을 알 수 있습니다. 그리고 주위를 둘러보고 무슨 일이 일어나는지 확인하기 위해 찾아보십시오.

세부 사항 here.

관련 문제