Recent Posts
Recent Comments
Archives
반응형
250x250
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Today
Yesterday

Total
05-12 04:06
관리 메뉴

Hey Tech

[Python] 텍스트 파일 읽고 쓰는 방법에 대해 알아보자!(feat. open, with 구문) 본문

SW 개발/Python

[Python] 텍스트 파일 읽고 쓰는 방법에 대해 알아보자!(feat. open, with 구문)

Tony Park 2021. 7. 20. 16:04
728x90
반응형

안녕하세요, 오늘은 파이썬을 활용하여 텍스트 파일을 읽거나 쓰는 방법에 대해 알아보겠습니다.

그럼 바로 시작하죠!

목차

1.  텍스트 파일 핸들링 절차
2. 텍스트 파일 작성(또는 생성하기)
    2.1.  텍스트 파일 접근하기
    2.2.  텍스트 파일 작성하기
    2.3.  텍스트 파일 닫기
3.  텍스트 파일 읽어오기
    3.1.  텍스트 파일 존재 여부 확인
    3.2.  open 함수: 모든 내용 읽어오기
    3.3.  realine 함수: 한 줄만 읽어오기
    3.4.  readlines 함수: 모든 내용 한 줄씩 읽어오기
4.  파일 포인터
    4.1.  tell 함수: 현재 파일 포인터 위치 반환
    4.2. seek 함수: 파일 포인터 위치 이동
5.  with 구문을 활용한 텍스트 파일 핸들링

1. 텍스트 파일 핸들링 절차

텍스트 파일을 읽고 쓰는 절차는 크게 다음과 같이 3가지 파트로 나뉩니다.

가장 중요한 점은 텍스트 파일을 핸들링 한 후에 반드시 텍스트 파일을 닫아주어야 한다는 것입니다.

 

1) 텍스트 파일 접근하기

2) 텍스트 파일 읽거나 쓰기

3) 텍스트 파일 닫기

 

이제 텍스트 파일을 접근하는 과정부터 읽거나 쓰는 방법까지 하나씩 알아보겠습니다.

2.  텍스트 파일 작성(또는 생성하기)

2.1.  텍스트 파일 접근하기

fw = open('new.txt', 'w')

텍스트 파일을 읽고 쓰는 모든 절차는 open 함수 를 이용하며 텍스트 파일을 한 객체에 할당합니다.

입력해야 하는 파라미터는 아래와 같습니다.

 

1) 파일명 입력: 파일 경로를 포함한 파일명 입력

2) 읽기/쓰기 모드 선택: 텍스트 파일을 작성할 것인지, 읽어오실 것인지 정해 줍니다.

- w: write의 약자로서 쓰기 모드

- r: read의 약자로 읽기 모드

 

텍스트 파일을 작성하고자 했기 때문에 w를 인자로 입력해 줍니다.

*만약 경로 내에 지정한 파일명의 파일이 존재하지 않으면 자동으로 해당 파일명을 갖는 새로운 파일을 생성합니다.

반대로 파일이 존재한다면 파일을 그대로 덮어씁니다.

2.2.  텍스트 파일 작성하기

for i in range(10):
    data = '{i}번째 줄입니다.\n'
    fw.write(data)

위와 같이 10줄을 입력해 보겠습니다.

텍스트 파일을 생성한 변수에 write 함수 를 사용하여 문자열을 입력해 줍니다.

2.3.  텍스트 파일 닫기

fw.close() # 텍스트파일 닫기

텍스트 파일을 모두 작성했다면 반드시 파일을 닫아주는 작업이 필요합니다.

위와 같이 close 함수 를 사용합니다.

3.  텍스트 파일 읽어오기

이번에는 텍스트 파일을 읽어오는 방법에 대해 알아보겠습니다.

3.1.  텍스트 파일 존재 여부 확인

텍스트 파일을 작성할 때는 특정 파일이 존재하지 않으면 새롭게 생성해 주었습니다.

하지만, 텍스트 파일을 불러올 때 특정 파일이 존재하지 않는다면 에러가 발생합니다.

이를 방지하기 위한 에러 처리가 필요하며 방법은 크게 아래와 같이 2가지 존재합니다.

 

1) os 메서드: 파일 존재 여부 확인하기

2) try~ except 구문: error 발생 시 예외처리(프로그래밍이 죽는 것을 방지)

 

이번 포스팅에서는 1)번 경우를 알아보겠습니다. 

import os
filename = "new.txt"
if os.path.exists(filename):
    fr = open(filename, "r")
    print(f"\nContents in the file==\n{fr}")
    fr.close()
else:
    print("파일이 존재하지 않네요.")

먼저 os라는 내장 메서드를 불러옵니다.

os.path.exists 함수특정 파일의 존재 여부를 True/False 중 하나로 반환합니다.

이를 활용하여 파일이 존재할 때만 파일을 읽고 쓰는 절차를 수행하도록 프로그래밍을 작성할 수 있습니다.

3.2.  open 함수: 내용 전체 읽어오기

파일을 읽어올 때는 open 함수 내에서 읽기 모드이므로 'r'을 입력해 줍니다.

3.3.  readline 함수: 1줄만 차례로 읽어오기

텍스트 파일에서 한 줄씩 내용을 읽어오고 싶다면 readline 함수 를 사용하면 됩니다.

위에서 생성한 "new.txt" 파일에서 한 줄씩 읽어와 출력하는 코드를 작성해 보겠습니다.

import os
filename = "new.txt"
if os.path.exists(filename):
    fr = open(filename, "r")
    line = fr.readline()
    print(line)
    line = fr.readline()
    print(line)
    fr.close()
else:
    print("파일이 존재하지 않네요.")

실행 결과

1번째 줄입니다.
2번째 줄입니다.

위의 실행 결과에서 보실 수 있듯이, readline 함수는 호출될 때마다 파일의 첫 번째 줄부터 차례로 문자열 형태로 읽어온다는 특징이 있습니다.

3.4.  readlines 함수: 모든 내용 한 번에 읽어오기

텍스트 파일에서 읽어올 데이터가 적다면 readline 함수를 활용할 수 있겠지만, 읽어올 데이터가 많다면 불편하겠죠?

이런 경우에는 readlines 함수 를 사용하면 파일 내 모든 데이터를 한 번에 읽어 올 수 있습니다. 코드를 통해 좀 더 자세히 알아보죠.

import os
filename = "new.txt"
if os.path.exists(filename):
    fr = open(filename, "r")
    line = fr.readlines()
    print(line)
    fr.close()
else:
    print("파일이 존재하지 않네요.")

실행 결과

['1번째 줄입니다.\n', '2번째 줄입니다.\n', '3번째 줄입니다.\n']

위의 실행 결과에서 보실 수 있듯이 realines 함수 반환값의 특징은 다음과 같습니다.

 

1) 반환값이 리스트 형태입니다.

2) 각 원소는 개행 문자를 포함합니다.

 

readline은 line by line으로서 문자열 형태로 반환한 것에 반해 2가지 차이점이 있죠?

목적에 맞게 취사선택하시면 되겠습니다.

4.  파일 포인터

워드나 메모장 등의 편집기를 사용할 때 '|' 모양으로 깜빡깜빡하는 것을 볼 수 있습니다.

이를 일상에서는 '커서'라고 부르는데, 파일 입출력에서는 파일 포인터라고 부릅니다.

현재 커서의 위치를 알아야 원하는 위치에 글자를 읽거나 쓸 수 있겠죠?

이를 위해 파일 입출력에서 특정 파일 포인터를 찾는 함수로서 tell seek 가 있습니다.

그럼 각각에 대해 알아보겠습니다.

4.1.  tell 함수: 현재 파일 포인터의 위치 반환 

먼저, tell 함수는 현재 파일 포인터의 위치를 반환하며 파일의 초기 파일 포인터는 0 입니다.

아래 예시 코드를 통해 조금 더 자세히 알아보겠습니다.

import os
filename = "new.txt"
if os.path.exists(filename):
    fr = open(filename, "r")
    line = fr.readline()
    print(line)
    print(f"현재 파일 포인터 위치: {fr.tell()}")
    line = fr.readline()
    print(line)
    print(f"현재 파일 포인터 위치: {fr.tell()}")
    fr.close()
else:
    print("파일이 존재하지 않네요.")

실행 결과

현재 파일 포인터 위치: 0
현재 파일 포인터 위치: 11
1번째 줄입니다.

현재 파일 포인터 위치: 23
2번째 줄입니다.

실행 결과에서 보실 수 있듯이, 파일을 처음 읽어올 때 파일 포인터는 0인 것을 확인할 수 있습니다.

더불어, 초기 파일 포인터 외의 파일 포인터 값은 읽어온 line 끝자리 값이라는 것을 알 수 있습니다.

4.2 seek 함수: 파일 포인터 위치 이동

f.seek()

다음으로 seek 함수 는 현재 파일 포인터의 위치를 전달 인자 값에 해당하는 곳으로 이동시켜 주는 함수입니다.

예를 들어, seek(0) 이라고 전달인자로 0을 입력하면 파일 포인터가 문서 내 최상단 좌측에 위치하겠죠?

5.  with문을 활용한 텍스트 파일 핸들링

with open("textFile.txt","w") as f:
    f.write("with 문을 활용하면 close 구문 없이도 with문이 끝나면 파일 객체를 자동으로 닫아주어 편리합니다.")

마지막으로 with 문에 대해 알아보겠습니다.

지금까지 open 함수를 이용할 때는 파일을 읽거나 쓴 후에는 반드시 close 구문을 통해 파일 객체를 close 해줘야 했습니다. 

하지만 with 구문은 위의 코드와 같이 따로 close 구문 없이도 with 블록을 벗어나면 자동으로 파일 객체를 close 합니다.

이러한 편리성 덕분에 파일 입출력에 있어서 대중적으로 with 문이 많이 활용되고 있습니다.

with 구문에서도 파일 입출력은 '[텍스트 파일 객체].write()' 혹은 '[텍스트 파일 객체].read()' 형태로 이용합니다.


오늘은 파이썬을 활용하여 텍스트 파일을 읽거나 쓰는 방법에 대해 알아봤습니다.

내용에 오류가 있을 경우 아래에 댓글 남겨주시면 감사드리겠습니다.

그럼 오늘도 즐거운 하루 보내시길 바랍니다 :)

고맙습니다.

 

728x90
반응형
Comments