본문 바로가기
Python/Basic

[파이썬, Python] 파일의 입력과 출력 - open(), close(), with구문, readline(), readlines()

by coding-choonsik 2023. 3. 13.
728x90
반응형
SMALL

1. 파일 열기

  • 파일 열기 모드: w(출력), r(입력), a(추가 출력)
  • w는 지정된 경로에 파일이 없으면 파일을 만든 후 저장하고, 파일이 있으면 기존의 모든 데이터를 모두 지우고 다시 저장
  • r은 지정된 경로에 파일이 없으면 에러, 있으면 해당 파일의 데이터를 읽어옴
  • a는 지정된 경로에 파일이 없으면 파일을 만든 후 저장하고, 파일이 있으면 기존의 데이터 뒤에 이어서 저장
  • 파일 종류 모드: t(텍스트 파일, 생략이 가능), b(바이너리 파일 - 텍스트 파일 외 모든 파일/  영상 또는 동영상, 음악 등)
  • ✅파일을 출력할 때 작업이 모두 완료되면 close() 메소드를 사용하여 파일을 닫아야 정상적으로 데이터가 저장됨
파일변수 = open('파일 이름','파일 열기 모드 및 종류 모드')

변수명.close()


input = open('text.txt', 'r')    # 텍스트 파일 열기 모드
input = open('text.txt', 'rt')   # 텍스트 파일 열기 모드
input = open('apple.jpg', 'rb')  # 바이너리 파일 열기 모드

input.close()

1-1. 파일 저장하기

file = open('data.txt','wt') 

# write(): 내용을 적음
for i in range(10):
  file.write('파일 열기 테스트' + str(i) + '\n')      # '\n': 파일 내에서 개행
  
file.close()
print('data.txt파일에 쓰기 완료!')
>>> data.txt파일에 쓰기 완료!

 

➡ 현재 파일의 위치와 동일한 디렉토리에 data.txt 파일 생성

➡ 데이터 쓰기도 잘 되었다.


1-2. 파일 경로

  • 절대 경로: 디스크 드라이브의 최상위(root) 디렉토리부터 파일이 저장 또는 읽어올 디렉토리까지의 경로
    • 예) C:/yesung/python/Day6/utils.py
  • 상대 경로: 현재 화면에 표시되는 소스파일이 위치한 디렉토리부터 파일이 저장 또는 읽어올 디렉토리까지의 경로
    • 같은 디렉토리: 파일명 또는 ./파일명
    • 상위 디렉토리: ../파일명 또는 ./../파일명
    • 하위 디렉토리: 디렉토리명/파일명 또는 ./다렉토리명/파일명
    • 예) ./data.txt
file = open('./data/data.txt','wt') 
for i in range(10):
  file.write('파일 열기 테스트' + str(i) + '\n')      
file.close()
print('data.txt파일에 쓰기 완료!')

 

➡ 현재 파일의 위치와 동일한 디렉토리에 data라는 폴더 안에 data.txt 파일 생성

 

➡ 데이터 쓰기도 잘 되었다.


1-3. 파일 읽어오기

 

data.txt
0.00MB

 

  • read(): 파일로부터 전체 데이터를 읽어옴
  • read(size): 파일로부터 size만큼 데이터를 읽어옴

 

file = open('./data/data.txt', 'rt')
data = file.read()
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)    
file.close()
print('data.txt 파일 일부 데이터 읽기 완료!')
print(data)

>>> data.txt 파일 일부 데이터 읽기 완료 
파일 열기 테스트0     # 유니코드 10글자

  • read(10)를 이용하여 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

1-4. with문

  • 자원을 획득하고 사용 후 반납해야 하는 경우 블록을 사용하는 문장
  • close()메소드를 사용하지 않음
with open(경로) as 변수명:
...

  • 데이터를 입력받아 텍스트 파일에 저장하는 프로그램을 작성해보자. 단, 'quit'이 입력되면 저장을 끝내고 프로그램을 종료하자.
# 일반 open문

file = open('./data/word.txt', 'wt')
while True:
  data = input('단어를 입력하세요: ')
  if data.lower() == 'quit':   # 대문자를 입력할 수도 있음
    break
  file.write(data + '\n')

file.close()
print('저장되었습니다!')

>>> 단어를 입력하세요: apple
단어를 입력하세요: banana
단어를 입력하세요: quit
저장되었습니다!

 

# with문 사용
with open('./data/word.txt', 'wt') as f:
  while True:
    data = input('단어를 입력하세요: ')
    if data.lower() == 'quit':   
      break
    f.write(data + '\n')

print('저장되었습니다!')

>>> 단어를 입력하세요: apple
단어를 입력하세요: banana
단어를 입력하세요: quit
저장되었습니다!

 

word.txt
0.00MB

저장도 잘 되었다. 😀

 


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)

>>> apple
banana
['apple', 'banana']

1-6. readlines()

  • 전체 라인을 모두 읽어서 각 라인 단위로 리스트에 raw string으로 저장
with open('./data/word.txt','r') as f:
  lines = f.readlines()
  print(lines)


>>> ['apple\n', 'banana\n']
# raw data: 개행문자나 특수한 기능을 가진 문자까지 포함되어 나옴

for i in lines:
  print(i, end='')   
  
>>> apple     # 입력시 개행문자 입력
banana

 

 

728x90
반응형
LIST