본문 바로가기
Python

[Python] 파일 입출력(생성 , 쓰기, 읽기) 예제

by teamnova 2023. 5. 31.
728x90

파이썬으로 파일에 있는 데이터를 읽거나 파일로 데이터를 써야하는 경우가 있습니다. 오늘은 파이썬에서 파일을 열고 데이터를 읽고 쓰는 방법에 대해 정리해 보겠습니다. 

 

open() 함수

 

우선 파일에서 데이터를 읽거나 파일에 데이터를 작성하려면 파일을 열어야 합니다. 

파이썬에서 파일을 열기 위해서는 open() 함수를 사용해야 합니다. open() 함수는 파이썬의 기본 내장 함수입니다. 

 

open() 함수를 호출 할 때, 옵션에 따라 파일이 없으면 생성하고, 읽기 전용 혹은 쓰기용으로 파일을 열 수 있습니다. 

 

open() 함수는 다음과 같은 기본형을 가집니다. 

 

def open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True):

 

처음 사용해 보는 입장에선 일단 첫번째 두번째 인자만 잘 파악하는걸 목표로 해도 좋을것 같습니다. 

 

첫번째 인자 는 파일 경로 입니다. 

 

두번째 인자는 mode 로 파일이 열리는 모드를 설정하는데 이에 따라 읽기용인지 파일을 생성하고 쓸것 인지 등이 정해집니다. 

 

- 파일이 열리는 옵션, 모드 입니다. 이 모드에 따라 읽기 용인지 파일을 생성하고 쓸것인지 등이 정해집니다.
- 'r' : 기본값으로 정해져 있으며 파일을 읽기 위한 옵션 입니다.
- 'w' : 쓰기모드이며 파일에 내용을 쓸 때 사용하는 옵션 입니다. 만약 이미 파일이 존재하면 커서를 맨 앞으로 돌리면서 뒤에 내용을 다 잘라내기 때문에 내용이 사라질 수 있습니다. 파일이 존재하지 않는다면 새롭게 파일을 생성합니다.
- 'a' : 쓰기모드이며 파일에 내용을 쓸 때 사용하는 옵션입니다. w 옵션과는 달리 이미 파일이 존재하면 그 파일의 끝에 커서가 존재하고, 그 뒤에 이어쓰기가 가능합니다.
즉, 파일 내용을 잘라내지 않고 이어서 쓸 수 있습니다.
- 'x' : 파일이 없으면 파일을 생성하고 쓰기모드로 열립니다. 만약 파일이 있으면 에러를 발생시킵니다.

- 'b' : 바이너리 모드 입니다.
- 't' : 텍스트 모드 입니다. (기본값)

두번째 인자는 'r', 'w', 'a', 'x' 와 같이 't'나 'b'를 따로 쓰지 않으면 기본적으로 텍스트 모드인 't'로 열리게 됩니다. 즉, 읽기위해 'r'을 넣는다는것은 'rt'를 넣는것과 동일한 뜻 입니다.
만약 파일을 읽기모드인데 바이너리 모드로 열고싶다면 'rb' 이런식으로 집어 넣으면 됩니다.
따로 표기 하지않으면 기본적으로 텍스트 모드인 't'로 열립니다.

오픈한 파일을 닫으려면 파일 닫기 함수인 close()함수를 이용해야합니다.

 

write() 함수

 

파일 읽기 - read(), readline(), readlines(), seek(), tell()

 

read(n)

read() 함수는 파일로부터 n바이트의 문자를 읽어오는 함수 입니다. 인자로 아무 숫자도 주지 않는다면 파일에 있는 모든 문자를 읽어서 리턴하게 됩니다. 

 

with open("myFile.txt", "r") as f:
    example = f.read()

print(example)

readline()

readline() 함수는 파일의 현재 오프셋에서 한줄을 읽습니다. 

개행문자가 나타날 때까지 데이터를 읽어서 리턴해준다고 생각하시면 됩니다. 

 

with open("newFile.txt", "r") as f:
    while True:
        line = f.readline()
        if not line: # EOF
            break
            
        print(line.strip())

반복해서 파일의 데이터를 한줄씩 읽다가 읽은 라인이 없는경우 반복문을 벗어나게 코딩해 줍니다. 
readline()함수는 더이상 읽을 라인이 없는 경우 빈 문자열을 리턴해주고 개행문자를 기준으로 리턴해주는 readline() 함수 특성상 반복문에서 벗어나지 않습니다.

 

readlinse()

 

readlines() 함수는 파일의 현재 오프셋에서 개행문자를 포함한 모든 문자열을 읽습니다. 읽어온 문자열들을 리스트 형태로 반환합니다.

 

with open("myFile.txt", "r") as f:
    lines = f.readlines() # ['line1\n', 'line2\n', 'line3'] 저장
    for line in lines:
        print(line.strip())

 

오프셋 함수

 

seek(n) 파일커서의 오프셋을 입력한 숫자로 조절해 줍니다.

tell() 현재 커서의 오프셋을 리턴해 줍니다. 

 

두 함수를 이용하여 현재 오프셋을 인지하고 원하는 위치로 오프셋을 옮겨줄 수 있습니다. 

 

 

다음으로 간단하게 텍스트 파일을 생성하고 내용 입력후 읽는 과정까지 예제로 작성하며 포스팅 마무리 하겠습니다. 

 

#파일생성
f = open('newFile.txt', 'w')
f.close()
#데이터 입력
with open("newFile.txt",'a') as f:
    f.write('\n안녕하세요')
    f.write('\nwith 문을 사용하여 새로운 문장을 추가합니다.')
    f.write('\nwith 문 블록을 벗어나면 f객체는 자동으로 close 처리 됩니다.')
#작성된 파일 읽기
f = open('newFile.txt', 'r')

while True:
    a=f.readline()
    if not a:
            break
    print(a)

결과