반응형
python open 함수에 대한 간단한 설명
open()을 사용하여 이미 열려 있는 파일을 다시 열 경우, 새로운 파일 객체가 생성되며 이전 파일 객체와는 별개의 독립적인 파일 핸들로 작동합니다.
- 새로운 파일 객체 생성: 두 번째 open() 호출은 기존에 열려 있는 파일과는 무관하게 별도의 파일 객체를 생성합니다.
- 각 파일 객체의 독립성: 두 파일 객체는 서로 독립적이기 때문에 하나의 파일 객체에서 데이터를 읽거나 쓰더라도 다른 파일 객체에는 영향을 주지 않습니다.
- 파일 포인터 위치: 각 파일 객체는 독립적인 파일 포인터를 가지며, 파일 내에서의 읽기/쓰기 위치가 다를 수 있습니다.
- 모드와 충돌 가능성: 파일을 여는 모드에 따라 충돌이 발생할 수 있습니다. 예를 들어, 하나의 파일 객체가 쓰기 모드(w 또는 a)로 파일을 열어 쓰기를 하는 동안 다른 파일 객체가 읽기 모드로 열려 있으면 동기화 문제나 예기치 않은 동작이 발생할 수 있습니다.
파일을 열 때 다양한 모드가 있죠?
r : 읽기 모드
w : 쓰기 모드
a : 읽고 쓰기 모드
각각의 모드에서 어떻게 작동되는지 알려드리겠습니다.
open 쓰기 모드로 열었을 때 "w"
각 파일 객체(file1, file2)에 내용을 저장하는 경우, 동일한 파일을 두 번 열었더라도 독립적인 파일 핸들로 작동하기 때문에 동기화 문제나 예기치 않은 동작이 발생할 수 있습니다. 특히 파일을 다른 모드(w 또는 a 등)로 열어 쓰기를 하게 되면 다음과 같은 상황이 발생할 수 있습니다.
file1 = open("example.txt", "w")
file2 = open("example.txt", "w")
file1.write("Hello from file1\n")
file2.write("Hello from file2\n")
file1.close()
file2.close()
- 덮어쓰기: w 모드로 파일을 열면 기존 내용을 모두 지우고 새로 작성하므로, file1이 쓰고 닫은 후 file2가 다시 쓰면 마지막에 file2가 작성한 내용만 남습니다. 즉, file2의 내용이 file1의 내용을 덮어쓰게 됩니다.
- 병합되지 않음: 두 파일 객체의 쓰기 작업은 독립적이므로, 파일이 두 번 열려 각기 다른 내용이 쓰여도 마지막에 닫은 파일 객체의 내용만 남고, 병합되지 않습니다.
# example.txt 파일 내용은 아래와 같을 겁니다
Hello from file2\n
'a' 모드로 열어 파일에 쓰기
file1 = open("example.txt", "a")
file2 = open("example.txt", "a")
file1.write("Appending from file1\n")
file2.write("Appending from file2\n")
file1.close()
file2.close()
- 추가 모드 (a)의 경우: a 모드로 파일을 열면 파일 끝에 내용을 추가하게 됩니다. 두 파일 객체가 모두 a 모드로 열려 있으면, 두 파일 객체에서 각각 내용을 추가할 때 파일 끝에 차례로 붙여 쓰는 방식이므로, 두 객체에서 쓴 내용이 순서대로 쌓일 수 있습니다. 다만, 이 경우에도 정확한 순서는 보장되지 않을 수 있습니다.
example.txt 파일의 결과는?
Appending from file1
Appending from file2
예시: r 모드로 파일을 두 번 열기
file1 = open("example.txt", "r")
file2 = open("example.txt", "r")
# file1과 file2에서 독립적으로 읽기 작업을 수행
print(file1.read()) # file1에서 파일 전체 읽기
print(file2.readline()) # file2에서 첫 번째 줄만 읽기
file1.close()
file2.close()
위 코드에서 file1.read()를 호출하면 파일의 전체 내용을 file1 객체로 읽어올 수 있고, file2.readline()을 호출하면 file2는 첫 번째 줄만 읽어옵니다. 두 파일 객체는 각각 독립적으로 작동하므로, 한쪽에서 읽더라도 다른 쪽에는 영향을 주지 않습니다.
각각에서 read 혹은 readline을 실행시켜도 독립적으로 작동된다는 것이 포인트입니다.
반응형
'정보' 카테고리의 다른 글
셀레니움 에러 - ModuleNotFoundError: No module named 'selenium' (1) | 2024.11.11 |
---|---|
컴퓨팅 사고력 기르는 법 (닭이 먼저인가, 달걀이 먼저인가?) (6) | 2024.11.11 |
1970년생 만나이, 한국 나이 - 2024년 기준 70년생 나이 정보 (1) | 2024.11.10 |
1981년생 만나이, 한국 나이 - 2024년 기준 81년생 나이 정보 (0) | 2024.05.14 |
1982년생 만나이, 한국 나이 - 2024년 기준 82년생 나이 정보 (0) | 2024.05.14 |