programing

열려 있는 파일에서 read()를 두 번 호출할 수 없는 이유는 무엇입니까?

coolbiz 2023. 7. 29. 13:05
반응형

열려 있는 파일에서 read()를 두 번 호출할 수 없는 이유는 무엇입니까?

제가 하고 있는 연습을 위해, 저는 주어진 파일의 내용을 두 번 읽으려고 합니다.read()방법.이상하게도 두 번째로 부르면 파일 내용을 문자열로 반환하지 않는 것 같습니다.

여기 코드가 있습니다.

f = f.open()

# get the year
match = re.search(r'Popularity in (\d+)', f.read())

if match:
  print match.group(1)

# get all the names
matches = re.findall(r'<td>(\d+)</td><td>(\w+)</td><td>(\w+)</td>', f.read())

if matches:
  # matches is always None

물론 저는 이것이 가장 효율적이거나 최선의 방법이 아니라는 것을 압니다, 이것이 여기서 요점이 아닙니다.요점은, 왜 내가 전화를 할 수 없다는 것입니다.read()두 번이요? 파일 핸들을 다시 설정해야 하나요?또는 파일을 닫거나 다시 여시겠습니까?

부르기read()전체 파일을 읽고 파일 끝에 읽은 커서를 둡니다(더 이상 읽을 내용이 없음).한 번에 특정 수의 행을 읽으려는 경우 사용할 수 있습니다.readline(),readlines()다음 행을 통해 반복합니다.for line in handle:.

당신의 질문에 직접 대답하기 위해, 일단 파일이 읽히면,read()사용할 수 있습니다.seek(0)읽기 커서를 파일의 시작 부분으로 되돌립니다.파일이 너무 크지 않을 것이라는 것을 알고 있다면 저장할 수도 있습니다.read()변수 출력, 변수 사용findall표현.

Ps. 파일을 다 작성한 후에는 파일을 닫는 것을 잊지 마십시오.

다른 답변에서 제안한 것처럼 다음을 사용해야 합니다.seek().

예를 들어 보겠습니다.

>>> a = open('file.txt')
>>> a.read()
#output
>>> a.seek(0)
>>> a.read()
#same output

지금까지 이 질문에 대답한 모든 사람들은 전적으로 옳습니다.read()파일을 통해 이동하므로 호출한 후에는 다시 호출할 수 없습니다.

이 경우 파일을 다시 시작하거나 다시 열 필요가 없으며 읽은 텍스트를 로컬 변수에 저장하여 프로그램에서 두 번 또는 원하는 횟수만큼 사용할 수 있습니다.

f = f.open()
text = f.read() # read the file into a local variable
# get the year
match = re.search(r'Popularity in (\d+)', text)
if match:
  print match.group(1)
# get all the names
matches = re.findall(r'<td>(\d+)</td><td>(\w+)</td><td>(\w+)</td>', text)
if matches:
  # matches will now not always be None

읽기 포인터가 마지막 읽기 바이트/문자 뒤로 이동합니다.사용seek()읽기 포인터를 처음으로 되감는 방법입니다.

열려 있는 모든 파일에는 연결된 위치가 있습니다.
()를 읽을 때는 그 위치에서 읽습니다.예를들면read(10)새로 연 파일에서 처음 10바이트를 읽은 다음 다른 파일을 읽습니다.read(10)다음 10바이트를 읽습니다.read()인수 없이는 파일의 모든 내용을 읽고 파일 위치를 파일 끝에 둡니다.다음에 전화할 때read()읽을 것이 없습니다.

사용할 수 있습니다.seek파일 위치를 이동합니다.아니면 당신의 경우에는 아마도 하나를 하는 것이 더 나을 것입니다.read()두 검색 모두에 대한 결과를 유지합니다.

read() 소비합니다.따라서 파일을 재설정하거나 다시 읽기 전에 시작을 검색할 수 있습니다.또는 작업에 적합한 경우 다음을 사용할 수 있습니다.read(n)오로지 소비하기 위해nbytes

저는 항상 읽기 방법이 어두운 골목을 걸어가는 것과 같다는 것을 발견합니다.당신은 아래로 조금 내려가서 멈추지만, 만약 당신이 당신의 걸음을 세지 않는다면 당신은 당신이 얼마나 멀리 있는지 확신할 수 없습니다.Seek는 위치를 변경하여 솔루션을 제공하며, 다른 옵션은 파일을 따라 위치를 반환하는 Tell입니다.Python 파일 API는 읽기와 검색을 read_from(위치, 바이트)로 결합하여 더 쉽게 만들 수 있습니다. 그럴 때까지 이 페이지를 읽어야 합니다.

언급URL : https://stackoverflow.com/questions/3906137/why-cant-i-call-read-twice-on-an-open-file

반응형