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

표준 모듈

9D4U 2018. 11. 28. 16:47
728x90
반응형

1. subprocess 모둘

 ○ 외부 프로그램과 데이터 교환

- 외부 프로그램 실행(Popen() 사용)

- 외부 프로그램과 데이터 교환 : Popen은 외부 프로그램을 단순히 실행시키는 것이 아니라 출력 결과를 받아서, 별도의 처리를 할 수 있음.

2. subprocess의 다른 API들

 ○ call() : 주어진 명령을 실행시키고 프로세스 종료 코드를 리턴함.(OS에서 관리하는 프로세스 종료 코드로 0이면 정상 종료된 것을 의미, but 다른 코드가 리턴되면 문제가 있다는 것을 의미)

- 실행 결과를 리턴

- 원형 : subprocess.call(agrs, *, stdin = None, stdout = None, stderr = None, shell = False)

 ○ getoutput() :  

- 실행 결과를 반환 = Popen과 PIPE를 이용했던 예제와 같은 역할을 함 <- 결과를 출력하기 위해서는 print() 등이 필요

- 원형 : getoutput(cmd)

 ○ check_call(): call함수와 기능적으로 동일

- call()과의 차이점은 프로세스 실행 오류 시, call()이 아닌 값을 리턴하는 반면, check_call()함수는 CalledProcessError 예외가 발생(실행 결과 값과 메시지들이 담겨 있음)

- 원형 : check_call(args, *, stdin=None,stderr=None,shell=False)

 ○ check_output() :

- getoutput() 함수와 같은 기능

- 오류 시, CalledProcessError 예외가 발생

- 원형 : check_output(args, *, stdin=None, stderr=None, shell=False, universalnewlines=False)

 ○ 긴 수명을 가진 프로세스의 로그 출력 : 파이프의 속성 값을 논블럭으로 설정하면 됨 

2. shutil 

 ○ 파일 복사

  - shutil.copy(src, dst, *, followsymlinks=True)

  - shutil.copy2(src, dst, *, followsymlinks=True)

  <- src로 지정된 파일을 dst로 지정된 파일 혹은 디렉토리로 복사.

    copy 와 copy2의 기능은 동일하지만, 복사하는 범위가 다름.

    copy() 함수는 파일의 내용만 복사하는 반면 copy2()는 파일의 소유자, 파일의 생성, 변경 시간 등 파일의

    메타 데이터도 같이 복사

 

 ○ 파일 삭제

- 파일 하나 삭제 os.unlink(), 폴더 전체 삭제 shutildml rmtree()를 사용

 ○ 파일 이동

- shutil의 move()함수는 파일 혹은 디렉토리를 다른 곳으로 이동시키거나 이름을 변경할 수 있음.

 ○ 기타

- 특정 디렉토리를 zip 혹은  tar로 만들어야 할 경우, makearchive() 함수를 이용.


3. OS 모듈

 ○ 환경변수

- os.environ

 ○ 디렉토리 파일 순환

- walk() 함수는 주어진 디렉토리를 시작으로 내부에 있는 모든 디렉토리와 파일들을 찾음.

- walk() 형식 : walk(top <- 조사할 디렉토리 지정, topdown=True <- 반환하는 순서 결정 = True : 상위 디텍토리에서 하위 디렉토리 순

, oneroor=None, followlinks=False)

 ○ 디렉토리 API

- 디렉토리 생성 삭제 : mkdir, rmdir(디렉토리 내에 파일이나 하위 디렉토리가 없어야 정상 실행 가능, 그렇지 않은 경우 OSError 예외 발생) 

  예외 예시) OSError: [WinError 145] 디렉터리가 비어 있지 않습니다

- 디렉토리 생성 : makedirs(name, mode=0o777, existok=False) <- 여러 단계의 디렉토리를 한 번에 만들기

  mkdir(name, mode=0o777) <- 하나의 디렉토리 만들기

- 디렉토리 제거 : removedirs(name)

  rmdir(name)

  -> 이 API들은 디렉토리 내에 파일이나 하위 디렉토리가 있으면 삭제하는 게 어려운 반면,

     shutil.rmtree()는 내부에 파일이 있어도 알아서 삭제함 뿐만아니라, 에러가 발생했을 때

     문제를 해결할 수 있는 메커니즘도 가지고 있음.

- 현재 디렉토리 : os.getcwd()

 ○ 파일 API

- stat : 파일이 가지고 있는 모든 속성에 대한 정보를 구할 수 있음

- rename : 파일의 이름을 변경

- unlink : 파일 삭제

4. os.path : 경로와 관련된 api

cf) pathlib이라는 고급 API 모듈이 있지만, 대부분 아직도 os.path를 사용하고 있음.

 ○ 경로명 자체 정보

- os.path.basename(path) : 디렉토리명

  os.path.dirname(path) : 파일명

- os.path.splitext(path) : 파일명과 관련 있음(파일 이름 + 확장자) -> 확장자 분리 가능

※ 확장자는 파일의 종류를 구별하기 위해서 사용됨. 

   그래서 웹 서비스를 만들고 올바른 파일을 업로드하는지 확인할 때 첫 번째로 확인 해봐야함.

 ○ 경로명 조작 : 경로명은 환경변수를 이용하거나 다른 기호들을 조합해서 만들 수도 있음.

- os.path.expanduser(path)

  os.path.expandvars(path)

- 경로명을 구분하는 문자는 운영체제마다 조금씩 다름(윈도우의 경우 : \, 리눅스나 맥의 경우 : /를 사용)

  -> join()함수는 이런 고민을 해결해 줌.

  os.path.join()

  join() 함수는 주어진 문자열을 사용해서 하나의 경로명을 만들어 줌.(문자열 작업을 하는 것보다 코드가 명확해짐)

- 절대 경로와 상대 경로

  os.path.abspath(path) : 절대 경로 반환

  os.path.normpath(path) : 경로명을 단순하게 줄여줌

  os.path.relpath(path, start = curdir) : 상대  경로 반환


 ○ 파일에 대한 기본 정보

- os.path.exists(path) : 주어진 경로(path)에 디렉토리 혹은 파일이 있는지 확인, 파일을 생성하기 전에 미리 파악해야 할 떄 사용, bool값

- os.path.isfile(path) : 파일인지 확인, bool값

- os.path.isdir(path) : 디텍토리 인지 확인, bool값

 ○ 파일에 대한 상세 정보

   stat도 파일에 대한 상세 정보를 제공하지만, 너무 저수준 API이기 때문에 사용에 어려움이 있음

- os.path.getsize(path) : 파일 혹은 디렉토리 자체의 크기를 바이트 단위로 반환 -> 응용하여 현재 디렉토리의 전체 크기 게산 가능

  os.path.getatime(path) : 파일에 접근한 시간 

  os.path.getmtime(path) : 파일에 수정한 시간

  os.path.getctime(path) : 파일에 생성한 시간



728x90

'스마트웹앱콘텐츠전문가 > 파이썬(플라스크, 데이터 처리)' 카테고리의 다른 글

플라스크  (0) 2018.12.06
웹 관련  (0) 2018.11.30
[python3]리스트  (0) 2018.11.27
[그래픽 인터페이스]  (0) 2018.01.25
[네트워크 프로그래밍]  (0) 2018.01.24