목차
[1] 기본 규칙
파이썬은 파일 처리를 위해 "open"이라는 키워드를 사용한다.
여기서 말하는 파일 처리란, 파일을 읽고 쓰는 행위를 말한다.
fh = open(<파일경로>, <접근모드>)
fh1 = open('lecture_note_1.txt', 'w') #파일 쓰기 write 예
fh2 = open('lecture_note_2.txt', 'r') #파일 읽기 read 예
□ 파일핸들러 fh:
파일 핸들러 변수명. 관례상 변수명은 f, fh, fr, fw 등이 흔히 쓰인다.
파일 핸들러가 무엇이냐면 파일을 다루어주는 컨트롤러라고 보면 된다.
파일 핸들러를 생성한 후에 ( fh = open('mytext.txt','r') 라고 외치기 )
이 컨트롤러를 이용하여 파일 처리를 해나갈 것이다.
□ 파일경로:
파일이름이 아닌 파일경로이다. 스트링 형태로 작은 따옴표나, 큰 따옴표 안에 파일 경로를 확장자까지 함께 넣어준다.
예제에는 단순히 "lecturenote.txt"라고 나와있지만, 그 것은 해당 파일이 코드와 같은 위치에 있을 때만 가능하다.
기존 파일을 건드린다면 : (기존 파일 읽기, 기존 파일에 내용 추가하기 등), 이미 있는 파일명을 넣는다.
새로운 파일을 만든다면 : (새로운 파일 쓰기) 만들고 싶은 파일명을 넣는다.
기존 파일을 건드리는 경우, 잘못된 파일 경로를 쓴다면, FileNotFoundError을 발생시킨다.
□ 접근모드:
기존 파일을 (1) 읽거나 (2) 내용추가 또는 (3) 새로운 파일 쓰기 할 것인지 택1
읽는 경우 read의 "r"
새로운 파일을 쓰거나 기존 파일을 수정할 경우, write의 "w" 또는 append의 "a"를쓴다.
[2] 파일 읽기 (read 모드)
fr = open('ineedadoctor.txt', 'r')
fr 이라는 파일 읽기 전용 파일 핸들러가 생성 되었다.
그럼 이제 fr뒤에 attribute를 달아보자. 어떻게 읽을 것인가? 그 읽어온 정보들은 무슨 형(形)으로 저장할 것인가?
fr.read()
fr.readline()
fr.readlines()
- read(): 파일의 문장을 통채로 다 읽어온다. 첫째줄부터 마지막줄까지. 스트링으로~
- readlines () : 파일의 문장을 통채로 다 읽어온다. 첫째줄부터 마지막줄까지. 리스트로~
- readline () : 리드라인스가 아니라 리드라인이다. 파일의 문장 하나만 읽어온다. 스트링으로.
** readline 더 알아보기**
어 그럼 readline에 대한 궁금증이 있을 것이다. 아니 그럼 첫 문장밖에 못 읽나요??
파일핸들러는 1회성이 아니다. 여러번 사용가능하다.
readline은 커서를 한 줄 한 줄 내리면서 한 문장씩 읽어오는 방식이다.
파이썬은 파일의 문장들을 어떻게 첫 번째, 두 번째 (첫째줄, 둘째줄 ...) 구분하냐고? 줄 바꿈 문자 엔터키 ("/n")로~
만약 주어진 텍스트 파일의 3번째 줄을 읽고 싶다면, readline()을 세 번 외쳐야 한다.
읽기 종료
파일 핸들러로 읽을 것을 다 읽어온 후에는, 마지막 줄에 fr.close()라고 외쳐주자.
close()는 해당 파일핸들러를 더 이상 쓰지 않겠다고 컴퓨터에 반납/종료/끝 해주는 것이다.
물론 fr.close()를 하지 않는다고 해서 에러가 발생하는 것은 아니지만, 안정적이지 못한 코드 상황이 된다.
다음과 같은 원치 않는 결과를 초래할수 있다.
- Resource leakage:
Each open file consumes system resources. If you don't close the file handler, these resources may not be released until the Python interpreter exits. This can result in resource leakage, especially in long-running programs. - Data integrity
When you write data to a file, it may not be immediately flushed and written to disk unless you explicitly close the file or use the flush() method. If the program terminates unexpectedly before the data is flushed, you might lose some or all of the data. - File Locking
Some operating systems may prevent other processes or programs from accessing a file that is currently open by another process. Failure to close a file might lead to issues if you try to open the same file later or by another program.
실습
ineedadoctor.txt란 파일을 읽어서 그럼 눈으로 확인해보자.
해당 텍스트 파일은 아래와 같은 내용이 있다.
17줄의 내용이 들어가 있다.
그렇기 때문에 만약 readlines()로 읽는다면 길이가 17인 리스트가 생성될 것이고.
만약 readline() 방식으로 간다면 총 17번 readline()이 가능할 것 이다.
[3] 파일 쓰기(write 모드)
fw = open('lecture_note_0316.txt', 'w')
이번에는, fw 이라는 파일 쓰기 전용 파일핸들러를 만들어 보았다.
lecture_note_0316이란 이름의 메모장 파일을 (확장자가 txt니까) 저장할 것이다.
fw.write(<적고자 하는 스트링>)
그런데 무엇을 저장할 것인가? 리스트도 가능했던 read랑 달리, write는 반드시 스트링만 가능하다.
저장할 스트링을 fw.write() 괄호 안에 넣어주자. fw.write("F = ma")
[4] 파일 쓰기(append 모드)
fw = open('lecture_note_0316.txt', 'a')
fw.write(<추가 하고자 하는 스트링>)
이번에도 역시 fw라는 *쓰기* 파일핸들러를 생성하였으나, 접근모드가 'a'이다 'w'가 아니라.
이럴 경우, 파일을 처음부터 다 새로 쓰는 것이 아니라, 기존 있는 파일에 마지막 줄부터 내용 추가가 된다.
만약 기존에 있는 파일이 아닐 경우 에러를 띄우는 것이 아니라, 그냥 새로 생성해서 첫 줄부터 써주니까 안심하자.