파이썬에서 작성된 코드만으로 파일을 시작해 여러 변수의 값이 변경된다 하더라도, 프로그램을 종료한 뒤 다시 시작하면 초기값으로 리셋되어있다.
즉, 저장이 안된다.
이 문제를 해결하기 위해 외부 파일을 사용하여 그 곳에 값을 저장, 사용하는 방법이 있다.
그 것을 할 수 있게 해주는 코드를 배워보자.
먼저 파이썬의 main 파일이 있는 곳에 my_file.txt(메모장 파일) 파일을 만들었다. 그리고 그 안에 Hello, world를 작성했다.
이제 main.py 코드 파일로 와보자.
파이썬에선 import하지 않아도 open이라는 파일명으로 하여금 해당 파일을 가져오는 명령어가 있다.
file = open("my_file.txt")
r = file.read()
print(r)
해당 파일을 file이란 변수에 가져오고, r이란 변수에 file의 내용을 읽어 저장한 뒤, 출력했다.
- 출력값
> Hello, world
정상적으로 내용이 출력되었다.
하지만 이 코드에 문제가 있다.
코드 내에서 열람한 my_file.txt파일이 언제 닫힐지 모른다는 것이다. 때문에 수동적으로 파일을 닫는 코드를 넣어주어야 한다.
file = open("my_file.txt")
r = file.read()
print(r)
file.close()
하지만 코드 작성 중 사용 파일이 많아지거나, 코드가 길어지면 close명령을 넣는 것을 잊을 수도 있고, 그러면 해당 파일이 메모리를 먹어 효율이 떨어질 수 있다.
때문에 따로 close를 넣지 않아도 자동으로 해주는 코드가 with이다.
with open("my_file.txt") as file:
r = file.read()
print(r)
이렇게 with을 사용하면 close를 넣지 않더라도 with이 자동으로 파일을 종료시켜준다.
with 뒤에 as file이 적혀 있는데 as 뒤에 적힌 file은 open된 파일을 담는 변수이다.
그러므로 오픈된 파일에 관한 명령을 작성할 때 as 뒤에 적은 변수명을 활용할 수 있다.
이번엔 mode에 대해 설명해보겠다.
위 예시에선 read()로 파일안에 있는 내용을 읽었다.
하지만 읽는 것 외에도 wirte를 사용하여 파일안에 새로운 값을 입력할 수 있다.
with open("my_file.txt") as file:
file.write("New text")
r = file.read()
print(r)
- 출력값
> file.write("New text")
io.UnsupportedOperation: not writable
하지만 그냥 write를 사용한다면 입력은 되지 않고 오류만 발생한다.
그 이유는 기본모드인 "r"은 읽기만 가능하기 때문이다.
with의 모드는 총 3가지가 있다.
"r" : 읽기(mode 지정 없을 시 해당 모드)
"w" : 쓰기(안에 있던 내용 삭제 후 새 내용 작성)
"a" : 추가(안에 있는 내용 뒤에 새 내용 추가)
이제 모드를 수정하여 새 내용을 작성해보자.
with open("my_file.txt", mode="w") as file:
file.write("New text")
w모드에선 read가 안되니 파일을 직접 확인해보자.
이번엔 a모드로 이 뒤에 Hello, world를 추가해보자.
with open("my_file.txt", mode="a") as file:
file.write("\nHello, world")
- my_file.txt
'파이썬' 카테고리의 다른 글
CSV데이터 읽기(pandas) (0) | 2023.07.30 |
---|---|
파이썬 상대 및 절대 파일 경로 (0) | 2023.07.29 |
리스트와 튜플 슬라이싱 (0) | 2023.07.26 |
파이썬 클래스 상속 (0) | 2023.07.26 |
파이썬 인스턴스 (0) | 2023.07.24 |