Python 파일 읽기/쓰기 (TEXT, JSON)

2 분 소요

TEXT 읽기/쓰기

with open('test.txt', 'w', encoding='utf-8') as f:
    f.write('hello!')

with open('test.txt', 'r', encoding='utf-8') as f:
    text = f.read()
    print(text)


# 출력
hello!
  1. with를 사용하면 해당 context(바로 밑 들여쓰기 부분)를 벗어나면 해당 자원을 반납합니다. 여기서는 openclose가 자원 반납에 해당하며, 별도로 close하지 않아도 자동으로 처리된다고 생각하면 됩니다.
  2. w, r은 파일 쓰기, 읽기 모드를 의미하며 자세한 설명은 아래와 같습니다.

    모드 설명
    r 읽기 모드
    w 쓰기 모드 - 기존 파일 내용 삭제 후 쓰기
    a 추가 모드 - 기존 파일 마지막(맨 밑)에 이어서 쓰기
  3. encoding은 가급적이면 쓰기 때 부터 utf-8로 맞춰서 사용해서 한글 등이 깨지는 일을 방지합니다.
  4. with open(...) as f 문법은 fopen(...) 객체를 가진다고 보면 됩니다.
  5. f.write, f.read는 의미 그대로 쓰고 읽을 때 사용하는 함수며, 텍스트를 줄 단위로 읽고 쓸때는 아래와 같은 형태로도 사용 가능합니다.
with open('test.txt', 'w', encoding='utf-8') as f:
    f.writelines('\n'.join(['hello', 'world', 'hi', 'bye']))

with open('test.txt', 'r', encoding='utf-8') as f:
    lines = f.readlines()
    print(lines)
    for line in lines:
        print(line.rstrip())
        
        
# 출력
['hello\n', 'world\n', 'hi\n', 'bye']
hello
world
hi
bye
  1. f.writelines는 list를 입력으로 받아서 쓰기를 합니다. join을 이용하면 각 문자열 사이에 개행을 넣어줄 수 있습니다.
  2. f.readlines는 파일을 개행 단위로 list로 읽습니다. 읽을때는 개행문자(\n)가 포함되는데, 이는 rstrip을 이용해서 제거할 수 있습니다.

JSON 읽기/쓰기

import json
from pprint import pprint

data = {
    'name': '홍길동',
    'age': 22,
    'address': '서울시 강남구 테헤란로'
}

with open('test.json', 'w', encoding='utf-8') as f:
    json.dump(data, f, indent=4, ensure_ascii=False)

with open('test.json', 'r', encoding='utf-8') as f:
    res = json.load(f)
    print(res)
    pprint(data, width=40)


# 출력
{'name': '홍길동', 'age': 22, 'address': '서울시 강남구 테헤란로'}
{'address': '서울시 강남구 테헤란로',
 'age': 22,
 'name': '홍길동'}
  1. json은 위와 같이 json.dumpjson.load를 이용해서 읽고 쓸 수 있습니다. 
  2. json.dump에서 indent는 들여쓰기를 의미하며, 파일에 들여쓰기까지 된 상태로 쓸 때 사용합니다.
  3. json.dump에서 ensure_ascii는 한글이 hex 형태로 써지는 것을 막아줍니다.
  4. pprint는 list, dictionary 등의 포맷을 읽기 쉬운 형태로 출력해줍니다.

댓글남기기