티스토리 뷰

Python

21. 파일 입출력

muru_ 2024. 3. 21. 17:19
# 운영체제의 힘을 빌려서 스트림을 통해 파일을 입출력
# 입력 : 밖에 있는 파일을 읽어올 때
# 출력 : 밖으로 파일을 생성할 때
# 열기 : 입력 + 출력

 

1. 파일 열기

파일을 열려면 open 함수를 사용합니다.

f = open("파일명", "모드")

 

파일명: 열고자 하는 파일의 이름이나 경로 모드: 파일을 어떻게 열 것인지를 지정

  • r: 읽기 모드 (기본값)
  • w: 쓰기 모드 (파일이 있으면 덮어쓰기)
  • a: 추가 모드 (파일의 끝에 내용을 추가)
  • b: 바이너리 모드 (텍스트가 아닌 바이너리 데이터를 읽고/쓸 때 사용)
  • t: 일반적인 글자를 내보거나 읽어올 때 (생략 가능)
  • +: 읽기와 쓰기 모드

2. 파일 쓰기

f = open('example.txt', 'w')          # 바이너리 모드로 열리므로 줄바꿈 x
f.write('Hello, Python!\n')           # 단일 문자열을 한번에
f.writelines(['Line1\n','Line2\n'])   # 문자열 리스트를 반복적으로
f.close()        # 이걸 해야지만 파일을 저장하고 닫음, 꼭! 해야함

example.txt 파일이 생성됨

( 내용 )

Hello, Python!

Line1

Line2

f = open('data.txt', 'wt')             # 텍스트 모드로 열리므로 줄바꿈 o
for i in range(10):
  f.write('파일 열기 테스트: ' + str(i) + '\n')
f.close()
print('data.txt 파일에 쓰기 완료')

data.txt 파일이 생성됨

( 내용 )

파일 열기 테스트: 0
파일 열기 테스트: 1
파일 열기 테스트: 2
파일 열기 테스트: 3
파일 열기 테스트: 4
파일 열기 테스트: 5
파일 열기 테스트: 6
파일 열기 테스트: 7
파일 열기 테스트: 8
파일 열기 테스트: 9

 

3. with 문

파일을 열고 작업을 수행한 후 자동으로 파일을 닫을 수 있음

( data 폴더에 word.txt 파일 생성하고 단어 입력 )

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

 

4. 파일 읽기

# 1)전체 다 읽기
f = open('example.txt', 'r')
content = f.read()  # 10글자 읽을 떈 f.read(10)
print(content)
f.close()

# 2)10글자 읽기 반복
f = open('example.txt', 'r')
while True:
  data = f.read(10)    # 큰 파일일 경우 메모리, 처리 속도가 효율적
  if not data:         # 10글자씩 읽다가 더 이상 문자가 없으면 True
    break
  print(data, end='')
  

# 3)한 줄씩 읽기 반복
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)

# 4)readlines()로 읽고 출력
with open('./data/word.txt', 'r') as f:
    lines = f.readlines()         # 줄 바꿈까지 읽음
    print(lines)
# 결과 : ['apple\n', 'banana\n', 'lemon\n']
    
# 5)\n 없애기
li = []
for i in lines:
  li.append(i.replace('\n',''))
print(li)
# 결과 : ['apple', 'banana', 'lemon', 'orange']

 

5. 예외 처리와 함께 사용하기

- 파일 입출력 중에는 여러 가지 오류가 발생할 수 있음 (예: 파일이 존재하지 않음).
- 이를 위해 try-except 블록을 사용해 오류를 처리할 수 있음

try:
  with open('nofile.txt', 'r') as f:
    content = f.read()
    print(content)
except FileNotFoundError:
  print('파일이 존재하지 않습니다')

# 결과 : 파일이 존재하지 않습니다
# 글을 쓰는 것보다 파일을 만들어주는 것이 좋음
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함