파일을 다루기 위해서는 먼저 파일을 오픈해야한다. 이때 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
가 예상하는 위치가 아닐 수 있음을 유의해야 한다.
참고