KDT/Python
파일 입출력
jhwannabe
2023. 3. 13. 14:36
1. 파일 열기
파일변수 = open('파일이름', '파일 열기 모드')
- 파일 열기 모드: w(출력), r(입력), a(추가출력)
- w는 지정된 경로에 파일이 없으면 파일을 만든 후 저장하고, 파일이 있으면 기존의 모든 데이터를 지우고 다시 저장
- r은 지정된 경로에 파일이 없으면 에러, 있으면 해당 파일의 데이터를 읽어옴
- a는 지정된 경로에 파일이 없으면 파일을 만든 후 저장하고, 파일이 있으면 기존의 데이터 뒤에 이어서 저장
- 파일 종류 모드: t(텍스트 파일, 생략 가능), b(바이너리 파일)
input = open('test.txt', 'r') # 텍스트파일 열기 모드
input = open('test.txt', 'rt') # 텍스트파일 열기 모드
input = open('test.jpg', 'rb') # 바이너리파일 열기 모드
✔ 파일을 출력할 때 작업이 모두 완료되면 반드시 close() 메소드를 사용해서 파일을 닫아야 정상적으로 데이터가 저장
파일 저장하기
- write(): 파일에 데이터를 씀
file = open('data.txt', 'wt')
for i in range(10):
file.write('파일 열기 테스트:' + str(i) + '\n') # \n: 파일 내에서 개행
file.close()
print('data.txt 파일에 쓰기 완료!')
파일 경로
- 절대 경로: 디스크 드라이브의 최상위(root) 디렉토리부터 파일이 저장 또는 읽어올 디렉토리까지의 경로
예) C:/jhwannabe/python/Day07 - 상대 경로: 현재 화면에 표시되는 소스파일이 위치한 디렉토리부터 파일이 저장 또는 읽어올 디렉토리까지의 경로
- 같은 디렉토리: 파일명 또는 ./파일명
- 상위 디렉토리: ../파일명 또는 ./../파일명
- 하위 디렉토리: 디렉토리명/파일명
※ \표기를 /로 변환할 것!
file = open('data/data.txt', 'wt')
for i in range(10):
file.write('파일 열기 테스트:' + str(i) + '\n') # \n: 파일 내에서 개행
file.close()
print('data.txt 파일에 쓰기 완료!')
파일 읽어오기
- read(): 파일로부터 데이터를 읽어옴
- read(size): 사이즈만큼 데이터를 읽어옴
file = open('./data/data.txt', 'rt')
data = file.read()
file.close()
print('data.txt 전체 데이터 읽기 완료')
print(data)
# data.txt 전체 데이터 읽기 완료
# 파일 열기 테스트:0
# 파일 열기 테스트:1
# 파일 열기 테스트:2
# 파일 열기 테스트:3
# 파일 열기 테스트:4
# 파일 열기 테스트:5
# 파일 열기 테스트:6
# 파일 열기 테스트:7
# 파일 열기 테스트:8
# 파일 열기 테스트:9
file = open('./data/data.txt', 'rt')
data = file.read(10) # 유니코드 10글자 읽어옴
file.close()
print('data.txt 전체 데이터 읽기 완료')
print(data)
# data.txt 전체 데이터 읽기 완료
# 파일 열기 테스트:
# read(10)을 이용하여 data.txt에 있는 모든 데이터를 출력하기
file = open('./data/data.txt', 'rt')
while (1):
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 저장되었습니다.
file = open('data/fruit.txt', 'wt')
while 1:
fruit = input('단어를 입력하세요: ')
if fruit == 'quit':
file.close()
break
file.write('단어를 입력하세요: ' + fruit + '\n')
print('저장되었습니다.')
with 문
- 자원을 획득하고 사용 후 반납해야하는 경우 블록으로 사용하는 문장
with open('data/fruit.txt', 'w') as f:
while 1:
fruit = input('단어를 입력하세요: ')
if fruit.lower() == 'quit':
break
f.write(fruit + '\n')
print('저장되었습니다.')
# 단어를 입력하세요: apple
# 단어를 입력하세요: banana
# 단어를 입력하세요: orange
# 단어를 입력하세요: melon
# 단어를 입력하세요: quit
# 저장되었습니다.
readline()
- 텍스트 파일을 한 줄씩 읽어서 처리
- 파일이 종료되어 더이상 읽을 수 없으면 빈 문자열 ''을 읽어옴
with open('./data/fruit.txt', 'r') as f:
lines = []
while 1:
line = f.readline()
if not line:
break
if len(line.strip()) != 0:
print(line, end='')
lines.append(line.strip())
print(lines)
# apple
# banana
# orange
# melon
# ['apple', 'banana', 'orange', 'melon']
readlines()
- 전체 라인을 모두 읽어서 각 라인 단위로 리스트에 저장 (raw string으로 저장)
with open('./data/fruit.txt', 'r') as f:
lines = f.readlines() # \n도 표기됨
print(lines)
# ['apple\n', 'banana\n', 'orange\n', 'melon\n']
for i in lines:
print(i, end='')
# apple
# banana
# orange
# melon
2. 인코딩과 디코딩
인코딩(Encoding)
- 컴퓨터에서 사람이 인지할 수 있는 형태의 데이터를 약속된 규칙에 의해 컴퓨터가 사용하는 0과 1로 변환하는 과정
- 인코딩 = 코드화 = 암호화 = 부호화
- 예) 아스키코드 인코딩, URL 인코딩, Base64 인코딩, 유니코드 인코딩..
- 유니코드
txt1 = 'Hello Python!'
type(txt1) # str
txt2 = txt1.encode('utf-8')
type(txt2) # byte
print(txt2) # b'Hello Python!'
txt3 = '안녕하세요 파이썬'
print(txt3.encode('utf-8'))
# b'\xec\x95\x88\xeb\x85\x95\xed\x95\x98\xec\x84\xb8\xec\x9a\x94 \xed\x8c\x8c\xec\x9d\xb4\xec\x8d\xac'
디코딩(Decoding)
- 사람이 이해할 수 있는 언어로 되돌리는 것
- 디코딩 = 역코드화 = 복호화
- 유니코드 변환 사이트
txt3 = '안녕하세요 파이썬'
txt4 = txt3.encode('utf-8')
print(txt4)
# b'\xec\x95\x88\xeb\x85\x95\xed\x95\x98\xec\x84\xb8\xec\x9a\x94 \xed\x8c\x8c\xec\x9d\xb4\xec\x8d\xac'
print(txt4.decode('utf-8'))
# 안녕하세요 파이썬
728x90