[python] 파일 사용하기

파일에 문자열 쓰기

# 파일에 문자열을 쓸 때는 open 함수로 파일을 열어서 파일 객체를 얻은 뒤 write 메소드를 사용한다.
# 파일객체 = open(파일이름, 파일모드)
# 파일객체.write('문자열')
# 파일객체.close()
file = open('hello.txt', 'w')   # hello.txt 파일을 쓰기 모드(w)로 열기. 파일 객체 반환
file.write('Hello, world')      # 파일에 문자열 저장
file.close()                    # 파일 객체 닫기

# 파일에서 문자열을 읽을 때 또한 open 함수로 파일을 열어 파일 객체를 얻은 뒤 read 메소드를 사용한다.
# 이 때는 파일 모드를 읽기 모드인 r로 지정한다.
# 파일객체.read()
file = open('hello.txt', 'r')   # 파일을 읽기 모드(r)로 열기. 파일 객체 반환
s = file.read()                 # 파일에서 문자열 읽기
print(s)                        # 'Hello, world'
file.close()                    # 파일 객체 닫기

# 파일을 열 때마다 close로 닫아주려면 귀찮은 일이다.
# 따라서, 파이썬에서는 with as 를 사용하면 파일을 사용한 뒤 자동으로 파일 객체를 닫아준다.
# with open(파일이름, 파일모드) as 파일객체:
#     코드
with open('hello.txt', 'r') as file:
    s = file.read()
    print(s)

문자열 여러 줄을 파일에 쓰기, 읽기

# 파일에 여러 줄을 쓰려면 그냥 반복문을 이용해주면 된다.
with open('hello.txt', 'w') as file:
    for i in range(3):
        file.write('Hello, world! {0}\n'.format(i))  # 파일에 쓸 때는 개행을 지정해주지 않으면 줄바꿈이 되지 않는다.

# 리스트에 있는 문자열을 파일에 쓸 수도 있다.
lines = ['hi\n', 'I am Geniemo\n']
with open('hello.txt', 'w') as file:
    file.writelines(lines)

# read는 파일의 내용을 읽어서 문자열로 가져오지만
# readlines는 파일의 내용을 한 줄씩 리스트 형태로 가져온다.
with open('hello.txt', 'r') as file:
    lines = file.readlines()
    print(lines)  # ['hi\n', 'I am Geniemo\n']

# 파일의 내용을 한 줄씩 순차적으로 읽으려면 readline을 사용한다.
# readline으로 파일을 읽을 때는 파일에 문자열이 몇 줄이나 있는지 모르기 때문에 while을 사용한다.
# readline은 더 이상 읽을 줄이 없을 때는 빈 문자열('')을 반환하기 때문에 이런 특성을 이용해 조건식을 만든다.
with open('hello.txt', 'r') as file:
    line = None
    while line != '':
        line = file.readline()
        print(line.strip('\n'))  # 파이썬에서 읽어온 문자열에서 \n 삭제해서 출력

# for 반복문으로 간단하게 파일의 내용을 한 줄씩 읽을 수도 있다.
with open('hello.txt', 'r') as file:
    for line in file:
        print(line.strip('\n'))

# 파일 객체는 이터레이터이기 때문에 변수 여러 개에 저장하는 언패킹도 가능하다.
with open('hello.txt', 'r') as file:
    a, b = file
    print((a, b))

파이썬 객체를 파일에 저장하기, 가져오기

import pickle

# 파이썬은 객체를 파일에 저장하는 pickle 모듈을 제공한다.
# 파이썬 객체를 파일에 저장하는 과정을 피클링이라고 하고, 파일에서 객체를 읽어오는 과정을 언피클링이라고 한다.

# 피클링은 pickle 모듈의 dump 메소드를 사용한다.
name = 'park'
age = 24
address = 'Suwon'
scores = {'korean': 95, 'english': 89, 'math': 92, 'science': 45}
# james.p 파일을 바이너리 쓰기 모드(wb)로 열기(다른 확장자를 사용해도 상관없다.)
# pickle.dump로 객체를 저장할 때는 파일 모드를 wb로 지정해야 한다.
with open('james.p', 'wb') as file:
    pickle.dump(name, file)
    pickle.dump(age, file)
    pickle.dump(address, file)
    pickle.dump(scores, file)

# 언피클링은 pickle 모듈의 load 메소드를 사용한다.
# 언피클링을 할 때에는 반드시 파일 모드를 바이너리 읽기 모드(rb)로 지정해야 한다.
with open('james.p', 'rb') as file:
    name = pickle.load(file)
    age = pickle.load(file)
    address = pickle.load(file)
    scores = pickle.load(file)
    print(name, age, address, scores, sep='\n')

위에서 언급한 파일 모드 외에도 아래와 같이 다른 많은 파일 모드들이 있다.

Updated:

Leave a comment