3 분 소요

※ filein / fileout

  • storage와 프로그램 사이의 I/O를 file I/O라고 함
  • 스토리지로부터 파일을 불러오는 것은 input, 결과를 스토리지에 저장하는 것은 output
  • 다른 타입의 파일을 열기 위해선 다른 라이브러리가 필요
    • e.g. csv, excel 파일을 열기 위해, pandas, csv, openpyxl 라이브러리 사용
    • e.g. png, jpg 파일을 열기 위해, PIL, opencv 라이브러리 사용
    • e.g. pk, pkl 파일을 열기 위해, pickle 라이브러리를 사용 (파일 타입이 binary라서, ‘rb’를 써야함)
  • I/O가 데이터 처리를 할 때 가장 느린 파트이기 때문에 신경써줘야 함 (performance bottleneck)


■ 파일 모드

  • w (쓰기 모드): 파일에 내용을 쓸 때 사용
  • r (읽기 모드): 파일을 읽기만 할 때 사용
  • a (추가 모드): 파일의 마지막에 새로운 내용을 추가할 때 사용


□ txt 파일 쓰기 (write)

# 기본 구조
> f = open('저장경로/file_name.txt', 'w')
> f.close()

# with문을 사용하면 close()를 사용하지 않아도 된다.
> with open('저장경로/file_name.txt', 'w') as f
    f.write('something')
# e.g. 파일 쓰기로 열고 내용 작성하기
> f = open('~.txt', 'w')
> for i in range(10):
    data = f'{i+1} 번째 줄이다.\n'
    f.write(data)
> f.close()

# with문을 사용하면 close()를 사용하지 않아도 된다.
> with open('~.txt', 'w') as f:
    for i in range(10):
        data = f'{i+1} 번째 줄이다.\n'
        f.write(data)



□ txt 파일 읽기 (read)

  1. readline()
  2. readlines()
  3. read()
  4. for문 등을 이용
    • 파일은 반드시 ‘r’이나 ‘rb’로 불러와야 함 ‘w’로 불러올 경우 파일의 내용이 사라질 수 있음

1. readline()

  • 파일에 있는 한 줄(\n 기준 및 포함)을 불러옴 (파일의 첫 번째 한줄만 읽어들임)
# 기본 구조
> f = open('저장경로/file_name.txt', 'r')
> data = f.readline()
> f.close()
# e.g. 파일 읽기로 열고 내용 출력하기
> f = open('~.txt', 'r')
> data = f.readline()
> print(data)
> f.close()
# 1 번째 줄이다.


# e.g. 모든 데이터 출력하기
> f = open('~.txt', 'r')
> while data:
    data = f.readline()
    print(data)
> f.close()
# 1 번째 줄이다.

# 2 번째 줄이다.

# ...
# 10 번째 줄이다.
# e.g.1 모든 데이터 리스트 형태로 만들기
> f = open('~.txt', 'r')
> header = f.readline() # 첫 번째 row
> data = []

> line = f.readline() # 두 번째 row
> while line: # line이 빈 문자열이 될 때까지
    data.append(line.strip()) # '\n' 제거
    line = f.readline()
> f.close()

# e.g.2 모든 데이터 리스트 형태로 만들기
> with open('~.txt', 'r') as f:
    header = f.readline().strip() # '\n' 제거
    data = [line.strip() for line in f]
> print(data)


2. readlines()

  • 모든 데이터를 ‘\n’ 기준으로 잘라서 리스트로 저장함
# 기본 구조
> f = open('저장경로/file_name.txt', 'r')
> data = f.readlines()
> f.close()
# e.g.
> with open('~.txt', 'r') as f:
    data = f.readlines()
> type(data) # <class 'list'>
> data # ['1 번째 줄이다.\n', '2 번째 줄이다.\n', ... , '10 번째 줄이다.\n']


3. read()

  • 파일에 있는 모든 내용을 문자열로 불러옴
# 기본 구조
> f = open('저장경로/file_name.txt', 'r')
> data = f.read()
> f.close()
# e.g.
> with open('~txt', 'r') as f:
    data = f.read()
> type(data) # <class 'str'>
> data
# 1 번째 줄이다.
# 2 번째 줄이다.
# ...
# 10 번째 줄이다.


4. for문 이용

# e.g.
> L = []
> with open('~txt', 'r') as f:
    for line in f:
        L.append(line.strip())
> L # ['1 번째 줄이다.', '2 번째 줄이다.', ..., '10 번째 줄이다.']


◎ txt 불러오기 활용

  • pickle 라이브러리를 이용하여 파이썬 object 자체를 저장하기
# 리스트 자체를 저장히기
> import pickle

> with open("result.pk", 'wb') as f: # write as binary
    pickle.dump(output, f)
> with open("result.pk", 'rb') as f: # read as binary
    output2 = pickle.load(f)
> output2



□ txt 파일에 내용 추가하기 (append)

  • ‘a’ 사용
> with open('file_name.txt', 'a') as f:
   for line in range(10,20):
      data = f'{line+1} 번째 줄이다.\n'
      f.write(data)
> data
# 1 번째 줄이다.
# ...
# 10 번째 줄이다.
# 11 번째 줄이다.
# ...
# 20 번째 줄이다.

댓글남기기