파이썬 강좌(초급)/7.입출력

7.입출력 - 3) 파일입출력

파기차차 2024. 3. 31. 15:10
728x90
반응형
SMALL

 

파이썬에서 파일을 만들고 만든 파일을 읽는 다양한 방법에 대해 알아 보겠습니다.

 

다만, 가장 아래에 소개해 드리는 with를 사용한 파일입출력 방법이 가장 많이 사용되므로, 이 외 방법들은 "이런 방법도 있구나!" 정도로 보시고 넘어가셔도 되겠습니다.

 

 

1) print()문을 이용하여 파일 생성하는 방법

아래와 같이 한글이 가능하도록 인코딩 해주고, 파일을 쓰기 모드로 연 후 print()문으로 2줄 입력 후 파일을 닫습니다.

score_file = open("score.txt", "w", encoding="utf8") # 한글이 가능하도록 파일을 쓰기 모드로 연다.
print("수학 : 0", file=score_file) # print()문으로 할줄 입력
print("영어 : 50", file=score_file) # print()문으로 다시 한줄 입력
score_file.close() #파일 닫기

결과 : score.txt 파일이 생성되고, 생성된 파일을 열어보면 아래와 같이 3줄 입력된 것을 볼 수 있습니다.

수학 : 0
영어 : 50

                 <--- 커서가 여기를 가리킴

 

2) .write을 이용하여 파일에 쓰는 방법

아래와 같이 한글이 가능하도록 인코딩 해주고, 파일을 덧붙이기 모드로 연 후 .write로 2줄 입력 후 파일을 닫습니다.

score_file = open("score.txt", "a", encoding="utf8") # 한글이 가능하도록 파일을 덧붙이기 모드로 연다.
score_file.write("과학 : 80") # 3번째라인에 한줄 쓰기
score_file.write("\n코딩 : 100") # \n을 해주고 4번째 라인에 한줄 쓰기
score_file.close() #파일 닫기

결과 : score.txt 파일이 생성되고, 생성된 파일을 열어보면 아래와 같이 기존 2줄에 2줄이 추가(총 4줄)된 것을 볼 수 있습니다.

수학 : 0
영어 : 50
과학 : 80
코딩 : 100         <---  커서가 여기를 가리킴

 

 

 

3) read()함수를 이용하여 파일 전체를 읽는 방법

아래와 같이 한글이 가능하도록 인코딩 해주고, 파일을 읽기 모드로 연 후 read()함수로 파일내용 전체를 읽어와서 print()로 화면에 뿌려줍니다.

score_file = open("score.txt", "r", encoding="utf8") # 한글이 가능하도록 파일을 읽기 모드로 연다.
print(score_file.read()) # 파일의 내용 전체를 읽어온다.
score_file.close() #파일 닫기

결과

수학 : 0
영어 : 50
과학 : 80
코딩 : 100

 

4) readline()함수를 이용하여 파일내 한줄만 읽는 방법

아래와 같이 한글이 가능하도록 인코딩 해주고, 파일을 읽기 모드로 연 후 readline()함수로 파일내용 중 첫번째 라인 한줄만 읽어와서 print()로 화면에 뿌려줍니다.

score_file = open("score.txt", "r", encoding="utf8") # 한글이 가능하도록 파일을 읽기 모드로 연다.
print(score_file.readline()) # 파일의 내용 중 첫번째 한줄만 읽어온다.
score_file.close() #파일 닫기

결과

수학 : 0

만일 readline()을 이용하여 파일내용을 모두 읽어와서 뿌려주려면 아래와 같이 무식하게(?) 할 수도 있습니다.

score_file = open("score.txt", "r", encoding="utf8") # 한글이 가능하도록 파일을 읽기 모드로 연다.
print(score_file.readline()) # 파일의 내용 중 첫번째 한줄만 읽어온다.
print(score_file.readline()) # 파일의 2번째 줄을 읽어온다.
print(score_file.readline()) # 파일의 3번째 줄을 읽어온다.
print(score_file.readline()) # 파일의 4번째 줄을 읽어온다.
score_file.close() #파일 닫기

결과

수학 : 0

영어 : 50

과학 : 80

코딩 : 100

 

위 결과와 같이 파일의 모든 내용을 한 줄씩 가져와 뿌려주기는 하였으나, print()문으로 출력하여 빈줄이 사이 사이마다 들어가서 보기가 좋지 않습니다.

 

빈줄을 없애려면 print()문에서 end=""를 이용하여 빈 줄을 없애 줍니다.

score_file = open("score.txt", "r", encoding="utf8") # 한글이 가능하도록 파일을 읽기 모드로 연다.
print(score_file.readline(), end="") # 파일의 내용 중 첫번째 한줄만 읽어온다.
print(score_file.readline(), end="") # 파일의 2번째 줄을 읽어온다.
print(score_file.readline(), end="") # 파일의 3번째 줄을 읽어온다.
print(score_file.readline(), end="") # 파일의 4번째 줄을 읽어온다.
score_file.close() #파일 닫기

결과

수학 : 0
영어 : 50
과학 : 80
코딩 : 100

 

하지만 여전히 위의 방법은 무식(?)합니다.

 

아래와 같이 반복문을 이용하여 읽어오는 조금 더 개선된 방법을 살펴 보겠습니다.

score_file = open("score.txt", "r", encoding="utf8") # 한글이 가능하도록 파일을 읽기 모드로 연다.
while True: # 반복문이 참이면 계속 실행
	line = score_file.readline() # 파일내용을 한줄 읽어서 line 변수에 할당
    if not line: # line이 참이 아니면 반복문을 빠져나옴. 즉, 파일 내용의 끝이면 루프 종료
    	break
    print(line, end="") # 파일에서 한줄 읽어온 내용을 화면에 출력
score_file.close() #파일 닫기

 

 

 

5) readlines()함수를 이용하여 파일 내용을 리스트로 읽어 오는 방법

아래와 같이 리스트형태로 하나씩 읽어와서 화면에 뿌려줄 수도 있습니다.

한글이 가능하도록 인코딩 해주고, 파일을 읽기 모드로 연 후 readlines()함수로 파일내용 전체를 읽어와서 변수 lines에 리스트로 저장합니다.

리스트로 저장된 내용을 하나씩 꺼내서 출력하되, end=""을 사용하여 빈 라인 들어가지 않게 해주었습니다.

score_file = open("score.txt", "r", encoding="utf8") # 한글이 가능하도록 파일을 읽기 모드로 연다.
lines = score_file.readlines() # list형태로 가져오기
for line in lines:
	print(line, end="")
score_file.close() #파일 닫기

 

결과

수학 : 0
영어 : 50
과학 : 80
코딩 : 100

 

6) with 키워드를 사용하여 파일입출력 하는 방법

위의 내용은 잘 모르셔도 되나, with 사용하여 파일에 읽고 쓰는 방법은 알고 계시는 것이 좋습니다. 왜냐하면 가장 많이 사용하고 그 만큼 쉽고 편리하게 사용할 수 있기 때문입니다.

 

with 키워드를 사용하면 매번 close()를 해줄 필요가 없어 편리합니다.

 

파일에 내용을 쓸때 아래와 같이 코딩합니다.

with open("study.txt", "w", encoding="utf8") as f:
	f.write("Python")

 

 

 

위의 파일에 쓴 내용을 읽을 때 아래와 같이 코딩합니다.

with open("study.txt", "r", encoding="utf8") as f:
	print(f.read())

결과

Python

 

 

 

 

7) 실습

 

(1) study.txt파일을 생성한 후 다음과 같은 과목을 파일에 써보세요.

Python

Java

영어

수학

 

모범답안(아래 "더보기" 를 누르세요)

더보기
with open("study.txt", "w", encoding="utf8") as f:
	f.write("Python\nJava\n영어\n수학")

 

 

(2) study2.txt파일을 생성한 후 다음과 같은 과목과 목표점수를 파일에 써보세요.

Python 100

Java 90

영어 90

수학 90

 

모범답안(아래 "더보기" 를 누르세요)

더보기
with open("study.txt", "w", encoding="utf8") as f:
	f.write("Python 100\n")
	f.write("Java 90\n")
	f.write("영어 90\n")
	f.write("수학 90\n")

 

 

(3)위의 (1)번 문제에서 생성한 'study.txt' 파일을 읽고 해당 내용을 리스트에 저장 후 아래와 같이 출력되도록 해 보세요.

['Python', 'Java', '영어', '수학']

 

모범답안(아래 "더보기" 를 누르세요)

더보기
with open("study.txt", "r", encoding="utf8") as f:
	lines = f.readlines()

#print(lines)

codes = []
for line in lines:
	code = line.strip() # '\n' 제거
    codes.append(code) # codes리스트에 과목 추가

print(codes)

 

(4) 위의 (2)번 문제에서 생성한 'stduy2.txt' 파일을 읽고 과목과 목표점수를 딕셔너리로 저장 후 아래와 같이 출력해 보세요

{ 'Python':100, 'Java':90, '영어':90, '수학':90}

 

더보기
with open("study2.txt", "r", encoding="utf8") as f:
	lines = f.readlines()

#print(lines)

dict = {}
for line in lines:
	line = line.strip() # '\n' 제거
    key, value = line.split() # 공백을 기준으로 좌우 값 분리
    dict[key] = int(value)

print(dict)

 

 

728x90
반응형
LIST

'파이썬 강좌(초급) > 7.입출력' 카테고리의 다른 글

7.입출력 - 2)다양한 출력포멧  (2) 2024.03.31
7.입출력 - 1)개요  (0) 2024.03.31