파이썬/개념

[알기 쉽게 해설한 파이썬 with 컴퓨팅 사고력] CH08 파일 입출력

2024. 11. 18. 21:10
728x90

Section 01 입출력의 개요

 

 프로그램에서 무엇인가 나가면 출력이고, 프로그램에 무엇인가 들어오면 입력이다. 즉 프로그램을 중심으로 입출력을 정의할 수 있다.

 가장 많이 사용되는 입력장치인 키보드나 하드디스크에 있는 파일, 마켓에서 사용하는 바코드 리더기 등 많은 입력장치가 존재한다. 출력장치 역시 가장 많이 사용하는 모니터, 하드디스크에 저장되는 파일, 프린터 등 많은 출력장치가 존재한다.

 이와 같이 모든 입력장치와 출력장치는 프로그램과의 입출력을 통해서 동작한다. 대부분의 프로그래밍 언어는 이러한 복잡한 입출력 과정을 지원하는 라이브러리 함수(전문가에 의해 개발되어 제공)를 제공하고 있다.

 

 

 

 

 


 

 

 

 

 

Section 02 표준 입출력

 

 파이썬은 다양한 입출력 장치 중에서 키보드와 모니터를 표준 입출력장치로 정의하고 있다. 많은 프로그램에서는 표준 입력장치인 키보드로부터 입력받고, 처리를 거쳐 결과를 표준 출력장치인 모니터를 통해 나타낸다. 이러한 프로그램의 경우 프로그램이 종료되면, 표준 출력장치인 모니터에 나타낸 결과는 사라진다.

 

 

 

 

 


 

 

 

 

 

Section 03 파일 입출력

 

 프로그램의 처리 결과를 파일(하드디스크에 저장된 파일)에 저장할 수 있어야 하고, 파일에 있는 내용을 프로그램에서 읽어올 수 있어야 한다. 파이썬은 파일에 데이터를 저장하고 읽어오는 다양한 파일 입출력 함수를 제공하고 있다.

 

 

 

1. 파일 입출력을 위한 파일 열기와 닫기

 

 파일에 데이터를 저장하고, 파일로부터 데이터를 읽어오기 위해서 우선 파일을 열어야(open) 한다. 함수를 이용하여 파일을 열면 파일 객체가 반환되고, 반환된 파일 객체 메소드를 이용하여 입출력을 수행한다.

 

 입출력을 모두 수행한 다음에는 파일을 닫아주는 절차를 수행해야 한다.

  1. open() 함수를 이용하여 지정된 파일을 열어 파일 객체를 생성한다.
  2. 생성된 파일 객체로부터 데이터를 읽어 들이거나 출력한다.
  3. close() 함수로 지정된 파일 객체의 사용을 종료한다.

 

 

open() 함수

 

 파일을 열어 파일 객체를 반환하는 함수이다. 매개변수로 파일을 지정해야 하며, 지정된 파일이 없을 경우 자동으로 새로운 파일을 지정해야 하며, 지정된 파일이 없을 경우 자동으로 새로운 파일을 생성한다. 두 번째 방법으로 파일을 사용하는 경우는 파일을 닫는 과정을 생략할 수 있다.

# 형식
파일객체 = open(파일이름, 이용형태)
with open(파일이름, 이용형태) as 파일객체:
	# 파일 처리 블록

 

open() 함수의 이용 형태 모드

지정 값 모드 설명
r 읽기 모드 기존 파일로부터 읽어 들임
파일이 없는 경우 오류 발생
모드를 지정하지 않는 경우 묵시적으로 읽기 모드로 설정됨
w 쓰기 모드 파일에 데이터를 저장하기 위한 모드
지정된 파일을 생성하여 데이터 저장
지정된 파일이 이미 존재하는 경우, 그 파일의 내용을 모두 삭제하고 새로 저장
a 추가 모드 지정된 파일의 끝에 데이터를 추가하여 추가하여 저장
지정된 파일이 없는 겨우 새로 생성하여 데이터 추가

 

 

close() 함수

 파일을 종료할 수 있다.

 

 

# 예시

f = open("test.txt", 'w')
············
············
············
f.close()

 

 

 

2. 텍스트 파일

 

write() 메소드

 매개변수로 문자열만 사용가능하며, 지정된 파일을 생성하여 문자열을 추가한다. 추가 모드를 사용하여 파일 객체를 생성할 때, 지정된 파일이 없는 경우에는 새로 파일을 생성하여 추가한다.

f = open("D:/test.txt", "w")
f.write("안녕하세요.\n")
f.close()

 

read() 메소드

 지정된 파일의 전체 내용을 하나의 문자열로 반환하는 메소드이다. read(int n) 메소드를 이용하여 파일의 일부분을 읽어올 수 있다.

f = open("D:/test.txt", "r")

txts = f.read()
print(txts)

f.close()

 

 

 

3. 줄 단위 텍스트 파일 입출력

 

writelines() 메소드

 write() 메소드와 같은 기능을 수행하지만, 리스트나 튜플과 같은 자료형 파일로 저장할 수 있다. 매개변수로 지정된 자료형의 모든 내용을 파일에 저장한다. 단 리스트나 튜플 등에 저장된 데이터는 반드시 문자열이어야 한다.

L = ['충청남도', '충청북도\n', '전라남도', '전라북도\n', '경상남도', '경상북도']

with open("D:/LineTest.txt", "w") as f:
    f.writelines(L)
    # 리스트의 내용이 정수인 경우 오류 발생

# with 문을 사용하여 파일 객체를 생성하는 경우 f.close()를 할 필요 없다.

 

 

for 문을 이용하여 읽기

L = ['충청남도', '충청북도\n', '전라남도', '전라북도\n', '경상남도', '경상북도']

with open("D:/LineTest.txt", "r") as f:
    for line in f:
        print(line, end=' ')

 

 

readline() 메소드

 파일로부터 한 줄씩 읽어 들이는 메소드이다. 주로 while 문과 같이 사용된다.

L = ['충청남도', '충청북도\n', '전라남도', '전라북도\n', '경상남도', '경상북도']

with open("D:/LineTest.txt", "r") as f:
    while True:
        line = f.readline()
        print(line, end=' ')
        
        if line == ' ':
            break

 

 

readlines() 메소드

 파일로부터 모든 내용을 읽어 들여 한 줄을 리스트의 한 항목으로 만든다. 각각의 줄을 읽어 리스트로 반환한다.

L = ['충청남도', '충청북도\n', '전라남도', '전라북도\n', '경상남도', '경상북도']

with open("D:/LineTest.txt", "r") as f:
    textLists = f.readlines()
    
    print(textLists)

 

 

print() 함수로 파일에 출력

f = open("D:/LineTest.txt", "w")

print("aaaaaaaa", file=f)
# 매개변수 file을 이용하여 파일 객체를 지정하여 파일에 출력
print("bbbbbbbb", file=f) # 파일의 다음 위치에(파일 포인터)에 출력
print("cccccccc", file=f)

f.close()