[Python] 파일 입출력

형이·2023년 11월 8일

Python

목록 보기
21/34
post-thumbnail

📝 파일 입출력

🖥️ 1. 파일 열기

파일변수 = open('파일이름', '파일 열기 모드')

  • 파일 열기 모드 : w(출력), a(추가 출력), r(입력)
  • w는 지정된 경로에 파일이 없으면 파일을 만든 후 저장하고, 파일이 있으면 기존의 모든 데이터를 지우고 다시 저장
  • a는 지정된 경로에 파일이 없으면 만든 후 저장하고, 파일이 있으면 기존의 데이터 뒤에 저장
  • r은 지정된 경로에 파일이 없으면 에러
  • 출력 시 (w,a) 작업이 완료되면 반드시 close() 메소드를 사용해서 파일을 닫아야 정상적으로 데이터가 저장되고, 입력 시 파일을 닫지 않아도 정상적으로 처리된다.
  • 파일의 종류 구분 : t(text), b(binary)
	# 텍스트 파일 열기모드
	파일변수 = open('파일이름', 'r')
	# 바이너리 파일 열기 모드
	파일변수 = open('파일이름', 'rb')

file = open('./dir/data.txt', 'wt')
for i in range(10) :
  # 파일 열기 테스트 : 0
  # 파일 열기 테스트 : 1
  file.write('파일 열기 테스트 : ' + str(i) + '\n')
file.close()
print('data.txt 파일에 쓰기 완료!')

[결과]
data.txt 파일에 쓰기 완료!
from google.colab import drive

drive.mount('/content/drive')

[결과]
Mounted at /content/drive
  • 절대경로 : 디스크 드라이브의 최상위(root) 디렉토리부터 텍스트 파일이 저장될 디렉토리까지의 경로
	D:\gb_lhy_0630\python\workspace\mytotal.py
  • 상대경로 : 현재 화면에 표시되는 소스파일이 위치한 디렉토리부터 텍스트 파일이 저장될 디렉토리까지의 경로
	✔️ 같은 디렉토리 : 파일명, ./파일명
    	ex) data.txt, ./data.txt

    ✔️ 상위 디렉토리 : ../파일명
    	ex) ../data.txt

    ✔️ 하위 디렉토리 : 디렉토리명/파일명, ./디렉토리명/파일명
    	ex) dir/data.txt, ./dir/data.txt

🖥️ 2. 파일 읽기

# read() : 파일로 데이터를 읽어옴
# 텍스트 모드와 바이너리 모드에서 각각 다른 방식으로 동작
# 텍스트의 경우 문자수, 바이너리의 경우 바이트 수
file = open('data2.txt', 'rt')
data = file.read()
print('data2.txt 파일 읽기 완료!')
print(data)

[결과]
data2.txt 파일 읽기 완료!
파일 열기 테스트 : 0
파일 열기 테스트 : 1
파일 열기 테스트 : 2
파일 열기 테스트 : 3
파일 열기 테스트 : 4
파일 열기 테스트 : 5
파일 열기 테스트 : 6
파일 열기 테스트 : 7
파일 열기 테스트 : 8
파일 열기 테스트 : 9
file = open('data2.txt', 'rt')
data = file.read(5)
print('data.txt 파일 읽기 완료!')
print(data)

[결과]
data.txt 파일 읽기 완료!
파일 열기
file = open('data2.txt', 'rt')
while True:
  data = file.read(5)
  if not data:
    break
  print(data, end='')
  
[결과]
파일 열기 테스트 : 0
파일 열기 테스트 : 1
파일 열기 테스트 : 2
파일 열기 테스트 : 3
파일 열기 테스트 : 4
파일 열기 테스트 : 5
파일 열기 테스트 : 6
파일 열기 테스트 : 7
파일 열기 테스트 : 8
파일 열기 테스트 : 9

📝 문제

키보드로 입력하는 문자열을 텍스트 파일에 저장하는 프로그램을 작성해보자
(단, 'quit'가 입력되면 저장을 끝내고 프로그램을 종료)

file = open('output.txt', 'w')
while True:
  data = input('단어를 입력하세요 : ')
  if data.lower() == 'quit' :
    break
  file.write(data + '\n')
file.close()
print('output.txt 파일 저장 완료')

[결과]
단어를 입력하세요 : apple
단어를 입력하세요 : java
단어를 입력하세요 : quit
output.txt 파일 저장 완료

🖥️ 3. with문

  • 자원을 획득하고 사용 후 반납해야 하는 경우 사용되는 문장
with open('./output2.txt', 'w') as file :
  while True:
    data = input('단어를 입력하세요 >>')
    if data.lower() == 'quit' :
      break
    file.write(data + '\n')
print('output2.xtx 파일 저장 완료!')

[결과]
단어를 입력하세요 >>test
단어를 입력하세요 >>quit
output2.xtx 파일 저장 완료!
# readline() : 텍스트 파일을 한줄씩 읽어서 처리
# 파일이 종료되어 더이상 읽을 수 없으면 빈문자열('')을 읽음
file = open('data2.txt', 'r')
lines = []

while True :
  line = file.readline()
  if not line :
    break
  if len(line.strip()) != 0 :
    print(line, end='')
    lines.append(line.strip())
file.close()
print()
print('data2.txt 파일 읽기 완료!')
print(lines)

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

data2.txt 파일 읽기 완료!
['파일 열기 테스트 : 0', '파일 열기 테스트 : 1', '파일 열기 테스트 : 2', '파일 열기 테스트 : 3',
'파일 열기 테스트 : 4', '파일 열기 테스트 : 5', '파일 열기 테스트 : 6', '파일 열기 테스트 : 7',
'파일 열기 테스트 : 8', '파일 열기 테스트 : 9']
# readlines()
# 전체 라인을 모두 읽어서 각 라인단위로 리스트에 저장
file = open('data2.txt', 'r')
lines = file.readlines()
print(type(lines))
print(lines)

[결과]
<class 'list'>
['파일 열기 테스트 : 0\n', '파일 열기 테스트 : 1\n', '파일 열기 테스트 : 2\n', '파일 열기 테스트 : 3\n',
'파일 열기 테스트 : 4\n', '파일 열기 테스트 : 5\n', '파일 열기 테스트 : 6\n', '파일 열기 테스트 : 7\n',
'파일 열기 테스트 : 8\n', '파일 열기 테스트 : 9\n']

0개의 댓글