1. 파일 열기
파일 변수 = open('파일명', '파일 열기 모드 및 종류 모드')
- 파일 열기 모드 : w(출력), r(입력), a(추가출력)
- w는 지정된 경로에 파일이 없으면 파일을 만든 후 저장하고, 파일이 있으면 기존의 모든 데이터를 지우고 다시 저장
- r은 지정된 경로에 파일이 없으면 에러, 있으면 해당 파일의 데이터를 읽어옴
- a는 지정된 경로에 파일이 없으면 파일을 만든 후 저장하고, 파일이 있으면 기존의 데이터 뒤에 이어서 저장
- 파일 종류 모드 : t(텍스트 파일, 생략 가능), b(바이너리 파일)
input = open('text.txt', 'r') # 텍스트파일 열기 모드
input = open('text.txt', 'rt') # 텍스트파일 열기 모드
input = open('apple.jpg', 'rb') # 바이너리파일 열기 모드
파일을 출력할 때 작업이 모두 완료되면 반드시 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:/hhj/python/day2
- 상대 경로 : 현재 화면에 표시되는 소스파일이 위치한 디렉토리부터 파일을 저장 또는 읽어올 디렉토리까지의 경로
- 같은 디렉토리 : 파일명 또는 ./파일명
- 상위 디렉토리 : ../파일명 또는 ./../파일명
- 하위 디렉토리 : 디렉토리명/파일명
file = open('./data/data.txt', 'wt') # data 폴더가 없으면 FileNotFoundError 오류 발생
for i in range(10):
file.write('파일 열기 테스트 : ' + str(i) + '\n') # \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)
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
저장되었습니다.
file = open('test.txt', 'wt')
str1 = ''
while True:
str1 = input('단어를 입력하세요 : ')
if str1.lower() == 'quit':
break
file.write(f'{str1}\n') # \n 파일 내에서 개행
file.close()
print('저장되었습니다.')
1-4. with 문
- 자원을 획득하고 사용 후 반납해야 하는 경우 블록으로 사용하는 문장
with open('test.txt', 'wt') as f:
while True:
str1 = input('단어를 입력하세요 : ')
if str1.lower() == 'quit':
break
f.write(f'{str1}\n') # \n 파일 내에서 개행
print('저장되었습니다.')
1-5. readline()
- 텍스트 파일을 한 줄씩 읽어서 처리
- 파일이 종료되어 더이상 읽을 수 없으면 빈 문자열 ''을 읽어옴
with open('test.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(line)
'''
apple
orange
banana
'''
1-6. readlines()
- 전체라인을 모두 읽어서 각 라인단위로 리스트에 raw string으로 저장
with open('test.txt', 'r') as f:
lines = f.readlines()
print(lines)
# ['apple\n', 'orange\n', 'banana\n']
for i in lines:
print(i, end='')
'''
apple
orange
banana
'''
2. 인코딩과 디코딩
2-1. 인코딩(Encoding)
- 컴퓨터에서 사람이 인지할 수 있는 형태의 데이터를 약속된 규칙에 의해 컴퓨터가 사용하는 0과 1로 변환하는 과정
- 인코딩 = 코드화 = 암호화 = 부호화
- 예) 아스키코드 인코딩, URL 인코딩, Base64 인코딩, 유니코드 인코딩, ..
- 유니코드
Home
home.unicode.org
txt1 = 'Hello Python'
type(txt1) # str
txt2 = txt1.encode('utf-8')
type(txt2) # bytes
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'
2-2. 디코딩(Decoding)
- 사람이 이해할 수 있는 언어로 되돌리는 것
- 디코딩 = 역코드화 = 복호화
- 유니코드 변환 사이트
Unicode Converter, Unicode Encoding and Decoder
Online Unicode converter, easy to use unicode encoding and decoder tool. Convert plain text to unicode codes and vice versa.
checkserp.com
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')) # 안녕하세요 파이썬
print(txt4.decode('ascii')) # UnicodeDecodeError: 'ascii' codec can't decode byte 0xec in position 0: ordinal not in range(128)
'Python' 카테고리의 다른 글
24. 변수 타입 어노테이션 (0) | 2023.03.14 |
---|---|
23. 클로저와 데코레이터 (0) | 2023.03.14 |
21. 예외 처리 (0) | 2023.03.13 |
20. 모듈 (0) | 2023.03.13 |
19. 스페셜 메소드 (0) | 2023.03.10 |