파일을 다루기 위해서는 먼저 파일을 오픈해야한다. 이때 open() 함수를 이용한다.
with open()은 close()를 자동으로 해주기 때문에 비교적 코드가 간결하다.
open()으로 작성하면 별칭이 아닌 변수로 바인딩하여 사용하고 명시적으로 close()해준다.
# with open()
with open("매수종목1.txt", "w", encoding="utf8") as file:
file.write("005930\n005380\n035420")
# open()
file = open("매수종목1.txt", "w", encoding="utf8"):
file.write("005930\n005380\n035420")
open 함수의 두번째 arg인 mode는 파일을 어떤 용도로 사용할지를 결정하는 역할을 한다.
'w' : 쓰기 모드. 파일을 변경하거나 추가한다. 기존 파일이 없으면 새로 생성되고 기존 파일이 있는 경우에는 삭제하고 새로 생성한다. file pointer는 시작 부분에 위치
'r' : 읽기 모드. 파일의 정보를 읽기만 한다. file pointer는 시작 부분에 위치
'r+' : 읽기/쓰기 모드. 파일을 변경하고 읽을 때 사용한다. file pointer는 시작 부분에 위치
'a+': 추가와 읽기 모드. 파일을 열어 읽을 수 있고 파일 끝에 데이터를 추가할 수 있다. file pointer는 끝 부분에 위치
생략: 읽기 모드
import csv
with open("매수종목3.csv", mode="w", encoding="utf8", newline='') as file:
writer = csv.writer(file)
writer.writerow(["종목명", "종목코드", "PER"])
writer.writerow(["삼성전자", "005930", 15.59])
writer.writerow(["NAVER", "035420", 55.82])
with open("매수종목3.csv", mode="a+", encoding="utf8", newline="") as file:
writer = csv.writer(file)
writer.writerows([["종목명", "종목코드", "PER"],\
["삼성전자", "005930", 15.59],\
["NAVER", "035420", 55.82]])
코드를 먼저 살펴보면 현재 경로에 매수종목3.csv 파일을 w 모드로 생성하고 두번째 코드에서 mode='a+'에 따라 정보를 추가한다.
writerow()는 행 데이터를 추가하는데 매개변수는 iterable한 객체여야 한다. writerows()은 동시에 여러 헹 데이터를 추가하고자 할 때 사용되며 2차원 배열처럼 다중 배열을 이용해 작성할 수 있다.

매수종목3.csv 결과
파일을 읽기위해 모드를 설정해주고 파일 객체를 메소드를 통해 받아온다.
파일 데이터를 읽어오는 여러 메소드를 결과를 보면서 비교해보자


read() 는 size를 입력하지 않으면 파일의 전체 데이터를 읽어온다. 지정하면 원하는 바이트만큼 받아올 수 있다. 예시에서는size를 3으로 지정해서 3 바이트를 받아왔다. 한글은 1글자 당 1로 인식한다.
readline()은 한 줄씩 읽어온다. 그리고, 반환값을 출력했을때 마지막에 한 줄이 띄어져있음을 확인할 수 있다. 텍스트 파일은 라인별로 구성되어있는데 각 라인의 끝에는 보이지 않는 new line이 존재하기 때문이다. 파이썬에서는 이것을 /n으로 표기한다.
readline()은 한 줄씩 list 타입으로 모두 받아온다. 역시 마찬가지로 new line이 입력되어있는 것을 볼 수 있다.
예시의 결과처럼 일부 데이터만 읽은 경우, 닫히지 않은 파일에서는 file pointer가 예상하는 위치가 아닐 수 있음을 유의해야 한다.
참고