스마트웹앱콘텐츠전문가/파이썬(플라스크, 데이터 처리)

[파일처리]

9D4U 2018. 1. 23. 17:04
728x90
반응형

(파일에 데이터 읽고 쓰기)


※ 파일을 읽거나 쓰기 전에는 먼저 파일을 '열어야'하고, 용무를 마친 뒤에는 파일을 반드시 '닫아야' 함.

- 파일 열기/읽기-쓰기 닫기: 파일열기 <- file = open()

    파일 읽기/쓰기 <- file.read()/file.write()

    파일 닫기 <- file.close()



- 자원 누수 방지 : with~as 

open() 함수와 함꼐 with~as문을 사용하면 명시적으로 close() 함수를 호출하지 않아도, 파일이 항상 닫힘.

사용방법:

with open(파일이름) as 파일객체 :

#코드블록

#이곳에서 읽거나

#쓰기를 한 후

#그냥 코드를 빠져 나감.

Q) close()함수를 호출하지 않아도, 자원 해제를 어떻게 하는 걸까? with문의 비밀 : 컨텍스트 매니저


- open() 함수

컴퓨터가 다루는 모든 파일은 바이너리 파일 임. 그 중 텍스트 데이터만 기록하고 있는 파일을 텍스트 파일이라고 함.


open() 함수는 코드에서 입력되는 매개변수에 따라 텍스트 파일을 처리할 것인가 또는 바이버리 파일을 처리할 것인가를 결정.


open() 함수는 모두 8개의 매개변수를 받아들이며, 이 매개변수들 중 하나의 필수 매개변수와 일곱 개의 선택적 매개변수로 이루어짐.


open() 함수의 반환값을 물론 파일 객체임.


open(file, mode= 'r', buffering= -1, encoding=None, errors=None, newline=None, closefd=True, opener=None)


※open 함수의 두번째 매개변수인 mode에 주의!!!

파일을 읽기용으로 읽을 것인지 또는 쓰기용으로 읽을 것인지를 결정 + 텍스트 모드로 읽을 것인지 또는 바이너리 모드로 읽을 것인지를 이 변수에 넘긴 값으로 결정.

mode에 사용할 수 있는 값: 'r'(읽기용으로 기본값) ,w'(쓰기용으로 열기, 이미 같은 경로에 파일이 존재하면 파일내용을 비움), 'x'(배타적 생성모드로 열기),

   'a'(쓰기용으로 열기, 같은 경로에 파일이 존재하면 내용 덧붙임), 'b'(바이너리 모드), 't'(텍스트 모드(기본값)), '+'(일기/쓰기용으로 파일 읽기)


4번째 매개변수인 encoding은 텍스트 파일을 다루는 데 있어서 매주 중요함. 당연히 텍스트 모드에서만 사용 가능


여섯 번째 매개변수인 newline은 파일을 읽고 쓸 대 줄바꿈은 어떻게 처리할지를 나타냄, 텍스트 모드에서만 사용

(None, '',\n, \r, \r\n e) <- 다섯가지 중 하나를 입력할 수도 있다


- 텍스트 파일 읽기/쓰기 : 텍스트 파일을 읽고 쓰는데 도움을 주는 파일 객체의 몇 가지 메소드 소개

○ 문자열을 담은 리스트를 파일에 쓰는 writelines() 메소드 : 리스트에 담아 사용중인 여러 줄의 문자열을 파일에 저장할 떄, writelines()는 문자열을 요소로 가지는 순서열 객체를 매개변수로 입력받아 해당 순서열

  객체의 내용을 모두 파일에 기록함.

○ 줄 단위로 텍스트를 읽는 readline()과 readlines() 메소드 :

가장 많이 사용하는 메소드 두 가지 임.

readline() : 파일로부터 텍스트를 한 줄씩만 읽어옴. 이때 '한 줄'의 기준은 개행 문자가 됨.

readlines() : 파일의 모든 텍스트를 읽어들여 개행 문자 기준으로 요소를 삼는 리스트를 만들어 반환함.

cf) 파이썬3에서 제공하는 텍스트 인코딩

- 바이너리 파일 다루기 : 바이너리 파일은 메모리에 저장되어 있는 내용을 그대로 저장하고자 할 때 유용. 

○ 파이썬에서 struct 모듈의 도움이 없이는 바이너리 파일을 제대로 다루기가 어려움.

○ pack() 함수(=일반 데이터를 byteㄴ 형식으로 변환하는 기능)와 unpack()함수(bytes 형식을 튜플 형식으로 변환하는 기능)

struct.pack(fmt, v1, v2, ...) # 데이터 -> bytes

structc.unpack(fmt, buffer)  # bytes -> 튜플(데이터)(파일에 데이터 읽고 쓰기)


※ 파일을 읽거나 쓰기 전에는 먼저 파일을 '열어야'하고, 용무를 마친 뒤에는 파일을 반드시 '닫아야' 함.

- 파일 열기/읽기-쓰기 닫기: 파일열기 <- file = open()

    파일 읽기/쓰기 <- file.read()/file.write()

    파일 닫기 <- file.close()



- 자원 누수 방지 : with~as 

open() 함수와 함꼐 with~as문을 사용하면 명시적으로 close() 함수를 호출하지 않아도, 파일이 항상 닫힘.

사용방법:

with open(파일이름) as 파일객체 :

#코드블록

#이곳에서 읽거나

#쓰기를 한 후

#그냥 코드를 빠져 나감.

Q) close()함수를 호출하지 않아도, 자원 해제를 어떻게 하는 걸까? with문의 비밀 : 컨텍스트 매니저


- open() 함수

컴퓨터가 다루는 모든 파일은 바이너리 파일 임. 그 중 텍스트 데이터만 기록하고 있는 파일을 텍스트 파일이라고 함.


open() 함수는 코드에서 입력되는 매개변수에 따라 텍스트 파일을 처리할 것인가 또는 바이버리 파일을 처리할 것인가를 결정.


open() 함수는 모두 8개의 매개변수를 받아들이며, 이 매개변수들 중 하나의 필수 매개변수와 일곱 개의 선택적 매개변수로 이루어짐.


open() 함수의 반환값을 물론 파일 객체임.


open(file, mode= 'r', buffering= -1, encoding=None, errors=None, newline=None, closefd=True, opener=None)


※open 함수의 두번째 매개변수인 mode에 주의!!!

파일을 읽기용으로 읽을 것인지 또는 쓰기용으로 읽을 것인지를 결정 + 텍스트 모드로 읽을 것인지 또는 바이너리 모드로 읽을 것인지를 이 변수에 넘긴 값으로 결정.

mode에 사용할 수 있는 값: 'r'(읽기용으로 기본값) ,w'(쓰기용으로 열기, 이미 같은 경로에 파일이 존재하면 파일내용을 비움), 'x'(배타적 생성모드로 열기),

   'a'(쓰기용으로 열기, 같은 경로에 파일이 존재하면 내용 덧붙임), 'b'(바이너리 모드), 't'(텍스트 모드(기본값)), '+'(일기/쓰기용으로 파일 읽기)


4번째 매개변수인 encoding은 텍스트 파일을 다루는 데 있어서 매주 중요함. 당연히 텍스트 모드에서만 사용 가능


여섯 번째 매개변수인 newline은 파일을 읽고 쓸 대 줄바꿈은 어떻게 처리할지를 나타냄, 텍스트 모드에서만 사용

(None, '',\n, \r, \r\n e) <- 다섯가지 중 하나를 입력할 수도 있다


- 텍스트 파일 읽기/쓰기 : 텍스트 파일을 읽고 쓰는데 도움을 주는 파일 객체의 몇 가지 메소드 소개

○ 문자열을 담은 리스트를 파일에 쓰는 writelines() 메소드 : 리스트에 담아 사용중인 여러 줄의 문자열을 파일에 저장할 떄, writelines()는 문자열을 요소로 가지는 순서열 객체를 매개변수로 입력받아 해당 순서열

  객체의 내용을 모두 파일에 기록함.

○ 줄 단위로 텍스트를 읽는 readline()과 readlines() 메소드 :

가장 많이 사용하는 메소드 두 가지 임.

readline() : 파일로부터 텍스트를 한 줄씩만 읽어옴. 이때 '한 줄'의 기준은 개행 문자가 됨.

readlines() : 파일의 모든 텍스트를 읽어들여 개행 문자 기준으로 요소를 삼는 리스트를 만들어 반환함.

cf) 파이썬3에서 제공하는 텍스트 인코딩

- 바이너리 파일 다루기 : 바이너리 파일은 메모리에 저장되어 있는 내용을 그대로 저장하고자 할 때 유용. 

○ 파이썬에서 struct 모듈의 도움이 없이는 바이너리 파일을 제대로 다루기가 어려움.

○ pack() 함수(=일반 데이터를 byteㄴ 형식으로 변환하는 기능)와 unpack()함수(bytes 형식을 튜플 형식으로 변환하는 기능)

struct.pack(fmt, v1, v2, ...) # 데이터 -> bytes

structc.unpack(fmt, buffer)  # bytes -> 튜플(데이터)

728x90