w는 지정된 경로에 파일이 없으면 파일을 생성후 저장하고, 파일이 있으면 기존의 모든 데이터를 지우고 다시 저장 (한글의 삽입모드)
r은 지정된 경로에 파일이 없으면 에러, 있으면 해당파일의 데이터를 읽어옴
a는 지정된 경로에 파일이 없으면 만든후에 저장, 있으면 기존의 데이터 뒤에 이어서 저장 (한글의 입력모드)
파일 종류 모드: t(텍스트 파일, 생략 가능), b(바이너리 파일, # 바이너리 = 텍스트 이외의 모든파일)
파일을 출력할때 작업이 모두 완료되면 반드시 close() 메소드를 사용해서 파일을 닫아야 정상적으로 데이터가 저장됌
1-1. 파일 저장하기
file = open('data.txt', 'wt')
for i in range(10):
file.write('파일 열기 테스트: ' + str(i) + '\n') # \n: 파일 내에서 개행(엔터키역할)
file.close()
print('data.txt 파일에 쓰기 완료!')
data.txt 파일에 쓰기 완료!
1-2. 파일 경로
절대 경로: 디스크 드라이브의 최상위(root) 디렉토리부터 파일이 저장 또는 읽어올 디렉토리까지의 경로(c드라이브 부터)
예) C:/eadgnus/python/Day2/data.txt
상대 경로: 현재 화면에 표시되는 소스파일이 위치한 디렉토리부터 파일이 저장 또는 읽어올 디렉토리까지의 경로(현재위치부터)
같은 디렉토리: 파일명 or ./파일명
상위 디렉토리: ../파일명 or ./../파일명
하위 디렉토리: 디렉토리명/파일명 ./디렉토리명/파일명
리눅스에서는 ./ : 현재 파일위치라는뜻
file = open('./data/data.txt', 'wt')
for i in range(10):
file.write('파일 열기 테스트: ' + str(i) + '\n')
file.close()
print('data.txt 파일에 쓰기 완료!')
data.txt 파일에 쓰기 완료!
1-3. 파일 읽어오기
read(): 파일로부터 전체 데이터를 읽어옴
read(size): 파일로부터 사이즈 만큼 데이터를 읽어옴
file = open('./data/data.txt', 'rt')
data = file.read()
print('data.txt 전체 데이터 읽기 완료!')
print(data)
file.close()
data.txt 전체 데이터 읽기 완료!
파일 열기 테스트: 0
파일 열기 테스트: 1
파일 열기 테스트: 2
파일 열기 테스트: 3
파일 열기 테스트: 4
파일 열기 테스트: 5
파일 열기 테스트: 6
파일 열기 테스트: 7
파일 열기 테스트: 8
파일 열기 테스트: 9
file = open('./data/data.txt', 'rt')
data = file.read(10) # 유니코드 10 글자를 읽어온다.
print('data.txt 일부 데이터 읽기 완료!')
print(data)
file.close()
data.txt 일부 데이터 읽기 완료!
파일 열기 테스트:
# read(10)을 이용하여 data.txt에 있는 모든 데이터를 출력하기
file = open('./data/data.txt', 'rt')
while True:
data = file.read(10)
if not data:
break
print(data, end="")
파일 열기 테스트: 0
파일 열기 테스트: 1
파일 열기 테스트: 2
파일 열기 테스트: 3
파일 열기 테스트: 4
파일 열기 테스트: 5
파일 열기 테스트: 6
파일 열기 테스트: 7
파일 열기 테스트: 8
파일 열기 테스트: 9
문제
키보드로 데이터를 입력하고 텍스트 파일에 저장하는 프로그램을 작성해보자(단, 'quit'이 입력되면 저장을 끝내고 프로그램을 종료)
단어를 입력하세요: apple
단어를 입력하세요: banana
단어를 입력하세요: orange ...
단어를 입력하세요: quit 저장되었습니다.
while True:
data = input('단어를 입력하세요: ')
if data.lower() != 'quit':
file = open('./data/test.txt', 'at')
file.write(data + '\n')
else:
file.close()
break
단어를 입력하세요: QUIT
# 선생님 답안
file = open('./data/word.txt', 'w')
while True:
data = input('단어를 입력하세요: ')
if data.lower() == 'quit':
break
file.write(data + '\n')
file.close()
단어를 입력하세요: 바나나
단어를 입력하세요: 애플
단어를 입력하세요: 사과
단어를 입력하세요: QUIT
1-4. with 문
자원을 획득하고 사용 후 반납해야 하는 경우 블록으로 사용하는 문장
with open('./data/word.txt', 'w') as f:
while True:
data = input('단어를 입력하세요: ')
if data.lower() == 'quit':
break
f.write(data + '\n')
# file.close() 가 여기서는 필요가 없다.
단어를 입력하세요: 애플스토어
단어를 입력하세요: 에어팟 2
단어를 입력하세요: 에어팟 프로2
단어를 입력하세요: 감자바나나
단어를 입력하세요: 아보카도 스프
단어를 입력하세요: quit
1-5. readline()
텍스트파일을 한 줄씩 읽어서 처리
파일이 종료되어 더이상 읽을 수 없으면 빈 문자열 ' ' 을 읽어옴
with open('./data/word.txt', 'r') as f:
lines = []
while True:
line = f.readline()
if not line:
break
if len(line.strip()) != 0:
print(line, end="")
lines.append(line.strip())
print(lines)
파이썬에서는 __로 시작해서 __로 끝나는 특수한 메소드를 스페셜 메소드라고 부릅니다. 이 메소드들은 파이썬 내장 함수나 연산자와 함께 사용됩니다. 스페셜 메소드를 재구현하면 객체에 여러 가지 파이썬 내장 함수나 연산자에 원하는 기능을 부여할 수 있습니다.
스페셜 메소드 사용 방법과 장점
스페셜 메소드는 클래스에서만 사용 가능합니다. 클래스에서 스페셜 메소드를 오버라이딩하면, 파이썬의 내장 함수나 연산자에 사용자가 원하는 기능을 부여할 수 있습니다. 이렇게 하면 코드의 가독성을 높일 수 있으며, 객체 지향 프로그래밍의 특징인 다형성을 구현할 수 있습니다.
예제 코드
p1⸱=⸱Point(3,⸱4)
p1.print_point()
(3, 4)
p1⸱=⸱Point(3,⸱4)
p1.print_point()
(3, 4)
print(p1) # str()생략
(3, 4)
# str() 주소를 찾아주는 함수 Object class 함수임
print(str(p1))