* 이 글은 필자가 자신이 배운 내용을 정리하기 위한 것이며, 결코 Udemy 강의를 결제하지 않은 타인의 학습을 고려하여 작성되지 않았습니다.
* 이 글을 학습에 활용하기를 원하신다면, Udemy에서 '[한글자막] Python 부트캠프 : 100개의 프로젝트로 Python 개발 완전 정복' 강의를 구매하시는 것을 권장드립니다.
오랜만에 돌아온 (마지막이 17일이니까) python 포스트이다.
한동안은 python 글을 위주로 올리려고 한다. 적어도 섹션 60까지는 쭉 달려야 대학 입학 전에 python 기초를 끝낼 수 있을 것 같아서이다. (참고로 여기서 말하는 기초란 해당 분야의 전문가와 대화할 때 어느정도의 이해를 할 수 있는 수준을 갖춘 것이다.)
이번 강의에서는 python file이 아닌 다른 file을 python으로 건드리는 법을 배운다. 그러면 시작해보자!
가장 간단한 형식의 file 중 하나인 txt(텍스트) file을 다루기 위해서, python에서는 open()함수를 사용할 수 있다. 괄호 안에는 다양한 인수를 넣을 수 있지만, 같은 폴더에 있는 '파일명.확장자'를 넣으면 파일을 본격적으로 사용할 수 있다.
#code
file = open("my_file.txt")
print(file.read())
file.close()
이렇게 코드를 작성한다면 변수 file 안에 my_file.txt라는 파일이 담기고, file.read()를 하면 변수 file 안의 내용을 문자열로 반환한다. 그러므로 위 코드의 출력물은 my_file.txt 파일 안의 내용(문자열)이 될 것이다.
파일을 다 사용했다면 file.close()를 사용하여 파일을 닫을 수 있다.
위 코드를 다르게도 작성할 수 있는데, 이때 사용하는 것이 "with"키워드이다.
#code
with open("my_file.txt") as file:
print(file.read())
전에 적은 코드와 완전히 같은 기능을 하는 코드이지만, with 키워드가 알아서 파일을 관리해주므로 파일을 전부 사용했다면 그 즉시 파일이 닫히게 된다.
읽을 수 있다면, 당연히 쓸 수도 있다. 그러기 위해서는 우리가 미처 다 보지 못하고 지나친 open의 다른 인수 중 하나인 mode를 지정해야 한다.
모드의 기본값은 읽기모드이다. 이를 줄여서 "r"로 쓰므로, mode="r"이라는 내용이 이미 들어가 있는 것이나 마찬가지이다.
예상할 수 있겠지만 파일에 무언가를 쓰기 위해서는 write의 첫 글자인 "w"를 쓰면 된다.
write 함수는 기존에 있던 내용에 문자열을 추가하는 것이 아닌, 기존에 있던 내용을 문자열로 교체한다.
만약 교체가 아닌 추가를 원한다면 append의 첫 글자인 "a"를 사용하여 문자열을 추가할 수 있다.
open 함수에 존재하지 않는 파일명.확장자를 입력한다면 그 이름의 새로운 파일이 생성된다. 이 방법을 이용한다면 python을 이용해 없던 파일을 아예 새로 만드는 것도 가능하므로, 프로그램을 실행하는 순간에만 일시적으로 존재하는 값이 아닌 프로그램을 종료하고 재실행하였을 때에도 남아있어야 하는 값을 활용할 때에 사용하면 좋을 것이다.
파일 경로에는 절대 경로와 상대 경로가 있다.
절대 경로는, root 경로를 시작으로 경로를 표시한다. windows의 경우에는 root가 대부분 C 드라이브이며, 맥의 경우에는 Macintosh HD가 root이다.
기본적으로 경로를 표현할 때에는 한 단계 내려갈 때마다 슬래시(/)를 사용한다. (윈도우는 백슬래시(\)를 사용하지만, python 코드에 어떤 것을 사용하던 같게 기능하므로 편한대로 쓰면 된다.) 절대경로는 맨 윗 단계인 root에서 시작하므로 위로 거슬러올라갈 필요 없이 항상 내려가기만 하면 되므로 "/first_folder/second_folder/finally_file.txt"과 같이 사용할 수 있다.
상대 경로는, 지금 파일이 있는 위치를 시작으로 경로를 표시한다. 만약 코드가 있는 main.py와 같은 폴더의 자매 관계 파일을 사용하고자 한다면, "./file.txt"를 작성하여 해당 파일을 사용할 수 있으며, 이때 ./는 생략할 수 있다.
상대 경로는 최상위단계 폴더인 root에서 경로를 시작하지 않으므로 상위 단계 폴더로 거슬러 올라갈 때도 있는데, 그럴 때에는 ../를 사용한다. 두 단계 위로 올라가고 싶다면 ../../라고 쓸 수 있다.
이론은 이정도가 전부인데, 나와 같은 오류를 겪는 사람이 있을까봐 적어본다.
vs 코드를 사용했을 때 상대 경로는 main.py의 위치가 아닌 탐색기의 위치를 기준으로 한다.
그러니까, 내가 "폴더 열기"를 한 폴더를 기준으로 한다는 소리이다.
난 그걸 몰라서 어제 30분 넘게 "왜 강의대로 했는데 씨발 처 안 되는건데"를 외치다가 빡종했다.
참고하길 바란다.
오늘 강의 내용은 이정도이다. (강의에 있는 예제도 나같이 바보같은 실수를 하지 않는이상 어렵지 않게 풀 수 있다.)
혹시 예제 풀이에 어려움을 겪는다면 언제든지 댓글을 달아주길 바란다. 일주일 내에 풀이 관련 내용을 본문에 추가하겠다.
그러면 좋은 주말 보내고, 오늘 안에 다음 강의도 완강할 수 있길...