(파이썬) 텍스트 파일 읽기 쓰기

📍 intro


영타 연습을 위해 따로 설치가 필요없는 온라인용 말랑말랑 한컴타자⌨ 를 사용했다.

불러온 글 탭에 원하는 txt 파일을 업로드해서 타자 연습을 할 수 있게 되어있다.
파일 규격을 UTF-8로 변환 후 불러와야해서 파이썬 파일 입출력을 활용했다.
겸사겸사 파이썬에서 파일을 열고 저장하는 방법을 복습해보자 ❕


📁 파일 읽기와 쓰기

파일 읽기(read)는 파일을 여는 것, 파일 쓰기(write)는 파일 저장을 의미한다.

좀 더 큰 개념으로 살펴보면,

  • 파일 열기 : 하드 드라이브(HD, 저장공간)에 있는 데이터를 램(RAM, 메인 메모리)에 입력하는 것 : 📥Input
  • 파일 쓰기 : 램에서 사용하고 있는 데이터를 드라이브에 내보내어 저장하는 것 : 📤Output


📲 인코딩과 디코딩

컴퓨터는 문자를 못 읽는다. 숫자 코드로 변환해서 알려줘야 한다.
이러한 문자와 숫자 간 변환 방식을 문자코드라고 한다.

문자를 코드로 변환하는 것이 인코딩(encoding), 코드를 문자로 변환하는 것이 디코딩(decoding)이다. 만약 utf-8로 인코딩한 파일이 있다면, 이는 utf-8 방식으로만 디코딩할 수 있다.

파일 I/O와는 다른 개념인 점을 유의하자
처음에 파일 저장과 디코딩이 헷갈렸는데(..💻🖥) 코드를 문자로 바꾸는 디코딩은, 파일 인식 과정에서 컴퓨터가 하는 일이지 내가 하는게 아니었다. 난 그저 인코딩만 잘 해서 컴퓨터에게 넘겨주면 될 뿐

모든 텍스트 파일은 특정한 규격의 문자코드, 인코딩 방법을 갖는다.

인코딩 방식문자 코드언어
UTF8⭐유니코드all
CP949ASCII, ANSI한글 등
EUC-KREUC-KR한글, 영어, 한문 등

📌 open() 함수

  1. open() 함수를 사용해서 파일을 열거나 저장할 수 있다. open() 함수에는 모드 설정값을 사용한다.

    모드의미
    'w'쓰기(write, 저장)
    'r'읽기(read, 열기)
    'a'추가(append, 파일 마지막에 새로운 내용 추가)
  2. open() 함수는 with 구문과 함께 사용하면 훨씬 오류를 줄일 수 있다. with 블럭을 빠져나가면 알아서 close가 실행되기 때문이다. __enter__(), __exit__()를 자동 호출해주기 때문에 예외발생 또는 resource release 누락 시에도 정상 처리해준다. 즉, try / except / finally를 명시적으로 사용한 것과 같은 효과를 얻게 된다.

    참고) enter, exit, with 구문

  3. 파일 읽기는 .read() 말고도 readline(), readlines(), for문을 이용한 방법이 있다.

    • .readline()는 txt파일에 있는 첫번째 줄만 가져오고
    • .readlines()는 txt파일에 있는 모든 텍스트를 한 줄 단위로 끊어서 리스트에 저장해주고
    • for문 사용하면, 텍스트 파일의 처음부터 끝까지 자동으로 한 줄씩 내려간다
    with open("data/test.txt", 'r', encoding='UTF8') as f:
        for line in f:
            print(line)

📂 open() 함수로 파일 인코딩 방식 바꾸기

타자 연습에 많이 쓰는 소설 <무진기행>, <어린왕자>의 텍스트 파일을 구했다. 인터넷에 돌아다니는 걸 다운받아서 써도 되고, 좋아하는 뮤지션의 가사를 긁어다가 메모장으로 txt파일을 만드는 방법도 있겠다.

그럼 파일 I/O를 활용해서 인코딩 방식을 바꿔보자.

 

  1. 구한 텍스트 파일을 "어린왕자.txt" 파일로 저장해주었다.
  1. "어린왕자.txt"의 인코딩 방식을 확인한다. (utf8이 필요한 상황)

    참고) 파이썬 라이브러리로 확인하는 방법이 정리된 블로그

  2. Jupyter Notebook에서 파이썬 코드 새로 열기

    텍스트 파일은 코드(ipynb)와 같은 경로에 있어야 편하다.

  3. 기존 데이터를 담은 변수 만들기

    • r 모드로 "어린왕자.txt" 파일을 읽어온다.
    • as 뒤에 이 파일을 인지할 이름 little을 선언한 뒤, little이라는 이름의 데이터를 read하여 data 변수에 담기
with open("어린왕자.txt", "r") as little:
    data = little.read()
  1. 새로운 파일에 데이터 쓰기
    • w 모드인채로 open() 실행을 먼저 한다.
    • "The little prince.txt"라는 파일은 아직 내용이 없는 텍스트 파일이다.빈 txt파일에 연계된 객체 이름을 fileneme로 두고, 이 객체에 .write() 함수를 써서 data 변수에 담긴 데이터를 써주는(=저장해주는) 것이다.
    • 이때 encoding을 지정하면 파일 규격이 바뀐다.
with open("The little prince.txt", 'w', encoding="utf8") as filename:
    filename.write(data)
  1. 파일 "The little prince.txt"(utf8)를 한컴타자에 불러오기 후 사용

 

📇 결론) 영타 연습해서 빠른 타수로 코딩 시간 단축하자( ͡° ͜ʖ ͡°)ㅎㅎ

좋은 웹페이지 즐겨찾기