728x90
반응형
SMALL

1. 파일 열기

  • 파일열기 모드: w(출력), r(입력), a(추가출력,기존에 파일이 있을때 내용을 추가)
  • 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)

 
애플스토어
에어팟 2
에어팟 프로2
감자바나나
아보카도 스프
['애플스토어', '에어팟 2', '에어팟 프로2', '감자바나나', '아보카도 스프']
 

1-6. readlines()

  • 전체라인을 모두 읽어서 각 라인단위로 리스트에 raw string으로 저장

 

 
 
['애플스토어\n', '에어팟 2\n', '에어팟 프로2\n', '감자바나나\n', '아보카도 스프\n']
 

 

 
 
애플스토어
에어팟 2
에어팟 프로2
감자바나나
아보카도 스프
728x90
반응형
LIST

'파이썬' 카테고리의 다른 글

클로저(Closure)  (0) 2023.03.13
인코딩과 디코딩  (0) 2023.03.13
예외 처리  (0) 2023.03.13
Special Method  (0) 2023.03.10
클래스의 상속  (0) 2023.03.10

+ Recent posts