본문 바로가기
AI 공부/파이썬

파이썬 (파일(JSON) 입출력, 구글 드라이브 마운트, YAML, pickle 모듈)

by AI Sonny 2022. 8. 10.
728x90
파일 입출력
 
- open 함수
  • 파일을 열 수 있는 함수
  • 파일 객체를 반환
  • w: 쓰기 모드
  • a: 추가 모드
  • r: 읽기 모드

 

- 쓰기 모드 (w)

 

예시

f = open("memo.txt","w")
for i in range(1,11):
    data = f"{i} 번째 줄\n"
    f.write(data)   # 파일 안에 쓰겠다.
f.close()

 

위와 같이 for문을 이용하여 1부터 10까지 반복하여 글이 txt파일로 저장되도록 하였다.

 

쓰기 모드로 여는 순간 기존 파일에 내용을 덮어띄우기 떄문에 내용이 사라진다는 특징이 있다.

 

- 추가 모드 (a)

 

예시

 

f = open("memo.txt","a")
data = "11 번째 줄\n"
f.write(data)
f.close()

 

추가 모드는 단순히 내용을 추가하는 것으로 11번 째 줄을 넣어보았다.

 

- 읽기 모드 (r)

 

예시

 

f = open("memo.txt","r")
data = f.read() # 파일 전체의 내용을 읽어서 반환한다.
f.close()
print(data)

=>	1 번째 줄
	2 번째 줄
	3 번째 줄
	4 번째 줄
	5 번째 줄
	6 번째 줄
	7 번째 줄
	8 번째 줄
	9 번째 줄
	10 번째 줄
	11 번째 줄

 

읽기 모드를 사용하여 내가 이때까지 쓴 것과 추가한 것을 종합적으로 나타낼 수 있다.

 

 

- with 

  • 자동으로 파일을 닫아준다.
with open("memo.txt","r") as f: # open 함수로 인해 반환된 파일 객체를 f 변수가 받아준다.
    data = f.read()
    print(data)
    
=>	1 번째 줄
	2 번째 줄
	3 번째 줄
	4 번째 줄
	5 번째 줄
	6 번째 줄
	7 번째 줄
	8 번째 줄
	9 번째 줄
	10 번째 줄
	11 번째 줄

 

with 문을 쓰면 close를 따로 안해도 닫아주기 때문에 편리하다.

 

주로 with 문을 많이 쓴다고 한다.

 

그리고 with 문은 파일을 자동으로 닫아주기 때문에 다음처럼 메소드를 실행 시 오류가 발생한다.

 

f.read()

=>	---------------------------------------------------------------------------
	ValueError                                Traceback (most recent call last)
	<ipython-input-10-571e9fb02258> in <module>()
	----> 1 f.read()

	ValueError: I/O operation on closed file.

 


구글 드라이브 연결해서 파일 가져오기

- 마운트(mount)란?

  • 리눅스 환경에서 하드디스크나 usb 메모리 같은 물리적인 장치를 사용하기 위해 리눅스 환경에서 지정한 디렉토리에 연결해주는 과정을 말한다.

 

방법

 

from google.colab import drive
drive.mount('/content/drive')

=> Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount("/content/drive", force_remount=True).

 

다음과 같이 하면 마운트를 할 수 있다!

 

DATA_PATH = "/content/drive/MyDrive/01-Python/data/"
DATA_PATH	# 데이터 경로 지정

 

readlines()를 활용하면 리스트 형태로 담을 수도 있다.

 

with open(f"{DATA_PATH}memo.txt","r") as f:
    data = f.readlines()
    print(data)
    
=> ['1 번째 줄\n', '2 번째 줄\n', '3 번째 줄\n', '4 번째 줄\n', '5 번째 줄\n', '6 번째 줄\n', '7 번째 줄\n', '8 번째 줄\n', '9 번째 줄\n', '10 번째 줄\n', '11 번째 줄\n']

 


JSON 파일 입출력

  • 자바스크립트에서 사용되는 객체 표현식
  • 데이터를 저장하거나 전송할 때 많이 사용
  • 서버와 클라이언트간의 데이터 전송과정에서 많이 사용
  • 파이썬의 딕셔너리와 매우 유사

- JSON 선언

 

import json
DATA_PATH

=> /content/drive/MyDrive/01-Python/data/

 

사용 예시

 

with open(f"{DATA_PATH}info.json","r") as f:
    data = json.load(f) # json 파일을 딕셔너리 형태로 변환해서 반환

data

=>	{'Daniel': {'age': 20, 'height': 170},
 	'John': {'age': 20, 'height': 175, 'weight': 80}}
    
-----------------------------------------------------------------------

# 데이터 추가

data["용석"] = {"age":42}
data

=>	{'Daniel': {'age': 20, 'height': 170},
 	'John': {'age': 20, 'height': 175, 'weight': 80},
 	'용석': {'age': 42}}
    
-----------------------------------------------------------------------

# 파일 저장

with open("info.json", "w") as f:
    # 현재 디렉토리에 저장, ensure_ascii=False => 한글 출력, indent = ? => ?칸 들여쓰기
    json.dump(data,f,ensure_ascii=False,indent = 4)

 


 

YAML(Yet Another Markup Language)

  • 사람이 쉽게 읽을 수 있는 데이터 직렬화 양식
  • 데이터를 저장하거나 전송할 때 많이 사용

예시

 

import yaml 

with open("data.yml","w") as f:    # 라이브러리가 달라 형식이 다르다
    yaml.dump(data,f,default_flow_style = False, indent = 4, allow_unicode=True) # 이 형식 많이 사용
    
------------------------------------------------------------------------------------------------------
    
# 딕셔너리 전환

with open("data.yml","r") as f:
	data1 = yaml.load(f)
type(data1)

=> dict

------------------------------------------------------------------------------------------------------

data1

=>	{'Daniel': {'age': 20, 'height': 170},
	'John': {'age': 20, 'height': 175, 'weight': 80},
	'용석': {'age': 42}}

 


pickle 모듈

  • 우리가 사용하는 다양한 객체들을 파일로 저장하고 싶다면?
  • 객체의 구조를 직렬화해서 파일로 저장한다.

 

예시

 

import pickle	# 데이터 쓰기
data = [1,2,3,4,[10,20],"hi"]
with open("data.pkl","wb") as f:
    pickle.dump(data, f)
    
------------------------------------

# 데이터 읽기

with open("data.pkl","rb") as f:
    rdata = pickle.load(f)
rdata

=> [1, 2, 3, 4, [10, 20], 'hi']

 

pickle 모듈은 차이점은 w를 쓰지않고, wb를 쓴다. 또한 클래스와 인스턴스도 저장이 가능하다..!

 


오늘 수업은 정신없이 이것저것 많이 배웠다.

 

다 기억할 자신이 없어 여기다 내가 나중에봐도 알게끔 정리하였다.

 

복습만이 살길...

728x90

댓글