본문 바로가기

programming/python

[ python 친해지기 #12 ] 파이썬 파일 입출력

[ python 친해지기 #12 ] 파이썬 파일 입출력

 

안녕하세요. 심심한 코딩쟁이입니다.

 

오늘은 파이썬의 파일 입출력에 대해서 알아보겠습니다.

 

파일을 열거나 생성하고 내용을 삽입하거나 수정하여 저장하는 방법들을 살펴볼 테니

 

천천히 따라와 주세요.

 

python-logo
파이썬 로고


파일 생성

 

현재 작업 중인 디렉터리에 파일을 생각하는 방법은 간단합니다.

 

# 파일 생성하기
f = open("생성할 파일명", 'w')
f.close()

 

파일을 열 때 사용가능한 3가지 옵션에 대한 설명입니다.

 

w 쓰기모드
a 추가모드
r 읽기모드

 

쓰기모드로 파일을 열 때 이미 존재하는 파일을 연다면 내용이 모두 사라지고 처음부터 입력됩니다.

 

파일이 존재하지 않을 경우 현재 작업 디렉터리에 지정한 파일명으로 된 파일이 새롭게 생성됩니다.

 

이어서 작성하고 싶다면 추가모드 옵션을 사용합니다.

 

파일을 열때 절대경로와 상대경로 모두 가능

파일 경로에 \ (백슬래시)를 사용할 경우 이스케이프 문자 사용 ex) D:\\symxsym\\test.txt

파일 내용 입력

 

파일을 쓰기모드로 열고 내용을 입력해 봅시다.

 

# 파일에 내용을 입력해 봅시다.
f = open('D:\\symxsym\\hello.py', 'w') # 쓰기모드로 파일 오픈(파일 생성됨)

f.write('print(\"hello\")\n') # 큰따옴표를 사용하기위해 이스케이프 문자 사용

f.close() # 파일 객체 닫기

 

위 코드를 실행한 후 해당 경로에 들어가 보면 hello.py라는 파이썬 파일이 생성되어 있고

 

실행해 보면 hello가 제대로 출력됩니다.

 

make-python-file
파이썬 파일


파일 내용 추가

 

파일을 추가모드로 열고 내용을 추가해 봅시다.

 

# 추가모드를 사용해 내용 이어쓰기
f = open('D:\\symxsym\\hello.py', 'a') # 추가모드로 파일 오픈

for i in range(10):
    f.write(f'print(\"{i}\")') # 0에서 9까지를 출력하는 코드를 추가

f.close()

################# hello.py #################
print("hello")
print("0")
print("1")
print("2")
print("3")
print("4")
print("5")
print("6")
print("7")
print("8")
print("9")

 

우리가 의도한 대로 hello.py 파일에 파이썬 코드가 추가된 것을 확인할 수 있습니다.


다양한 파일 읽기 방법

 

파일의 내용을 읽는 방법들을 살펴보겠습니다.


readline() 한 줄 읽기

 

# readline() 한 줄 읽기
f = open('D:\\symxsym\\hello.py', 'r') # 읽기모드로 파일 오픈

str = f.readline() # 첫 번째 줄을 str에 넣음
print(str)

# 출력 결과####  줄 바꿈 문자 포함
print("hello")#
              #
###############
str = str.strip()
print(str)

# 출력 결과####
print("hello")#
###############
f.close()

 

눈에는 안 보이지만 위 예제에서 변수 str에는 print("hello")\n 가 대입됩니다.

 

즉, 줄 바꿈 문자(\n)가 포함되어 있습니다.

 

이를 없애기 위해서 strip() 함수를 사용합니다.

 

한 줄씩 읽어서 모든 내용을 읽으려면 반복문을 사용하면 편리합니다.

 

# readline() 한 줄 읽기와 반복문
f = open('D:\\symxsym\\hello.py', 'r') # 읽기모드로 파일 오픈

while True: # 무한 루프
    str = f.readline().strip() # 문자열 끝에 있는 줄바꿈 문자를 제거한 한 줄 읽기
    if not str: break # 더이상 읽을 데이터가 없을 때 readline()은 ""(빈 문자열)을 반환
    print(str)
f.close()

# 출력 결과
print("hello")
print("0")
print("1")
print("2")
print("3")
print("4")
print("5")
print("6")
print("7")
print("8")
print("9")

readlines() 모든 줄 리스트로 반환

 

# readlines() 모든 줄 리스트로 반환
f = open('D:\\symxsym\\hello.py', 'r') # 읽기모드로 파일 오픈

str_list = f.readlines() # ['print("hello")', 'print("0")',....]

for line in str_list:
    print(line.strip())

f.close()

# 출력 결과
print("hello")
print("0")
print("1")
print("2")
print("3")
print("4")
print("5")
print("6")
print("7")
print("8")
print("9")

 

각각의 줄을 요소로 가지는 리스트를 반환해 주기 때문에 반복문을 사용해 다루기 편리합니다.


read() 전체 내용을 문자열로 반환

 

# read() 전체 내용 문자열로 반환
f = open('D:\\symxsym\\hello.py', 'r') # 읽기모드로 파일 오픈

str = f.read() # 전체 내용을 하나의 문자열로 읽어들인다.
print(str)

f.close()

# 출력 결과
print("hello")
print("0")
print("1")
print("2")
print("3")
print("4")
print("5")
print("6")
print("7")
print("8")
print("9")

파일 객체와 for 문을 사용해 한 줄씩 읽기

 

# 파일 객체와 for 문을 사용해 한 줄씩 읽기
f = open('D:\\symxsym\\hello.py', 'r') # 읽기모드로 파일 오픈

for str in f: # 파일 객체 f를 for 문에 위치시켜서 한 줄씩 꺼내쓰는 느낌의 동작
    print(str.strip())

f.close()

# 출력 결과
print("hello")
print("0")
print("1")
print("2")
print("3")
print("4")
print("5")
print("6")
print("7")
print("8")
print("9")


with문을 사용해 파일 열기

 

# with문을 사용하면 f.close()가 자동으로 적용된다.
with open('D:\\symxsym\\hello.py', 'r') as f: # 원하는 모드 선택 (w, r, a)
    for str in f: # 파일 객체 f를 for 문에 위치시켜서 한 줄씩 꺼내쓰는 느낌의 동작
        print(str.strip())

# with의 블럭을 벗어나면 파일 객체가 닫힌다. 즉, f.close()가 자동 적용되는 셈이다.

 

with문을 사용한 줄 끝에 콜론(:)을 빼먹지 않게 주의하세요.


오늘은 파이썬의 파일 입출력에 대해 알아보았습니다.

 

파일 열기, 생성, 작성, 수정을 위해 다양한 모드와 함수들을 조합해 편리하게 파일을 다룰 수 있었습니다.

 

파일 입출력이 어렵게 느껴지신다면 우리가 평소에 모니터에 출력하던 것을

 

파일에 출력한다라고 생각하시면 좀 더 친근한 느낌이 들 것 같습니다.

 

추운 날씨가 계속해서 이어지고 있으니 다들 감기 조심하세요.

 

감사합니다.

반응형