파이썬

10. 표준 라이브러리

Mara7 2022. 8. 21.
반응형
LIST

10. 표준 라이브러리 둘러보기

10.1. 운영 체제 인터페이스

  • 운영 체제와 상호 작용하기 위한 함수를 제공
import os
print(os.getcwd()) 
				# 현재 워킹 중인 디렉터리를 리턴함
print(os.chdir('/server/accesslogs') 
				# 현재 실행중인 디렉터리를 변경함
print(os.system('mkdir today')) 
				# 시스템 쉘에 mkdir 커멘드를 실행함

##파일 기술자 : 해당 파일에 대한 정보
이 복사는 커널에서 사용자 공간으로 데이터를 전송한 다음
메모리에 커널 공간, 
커널 : os 만 접근할 수 있는 영역, 시스템에 접근하는 
 다시 커널로 전송하는 추가 비용 없이 수행됩니다. 

또한, 일부 파일 시스템은 추가 최적화를 구현할 수 있습니다. 

두 파일이 바이너리로 열린 것처럼 복사가 수행됩니다.

사용자영역에 잇는 커널 메모리를 복사한다.
커널 -> 파일 -> 사용자 영역에 복사 : 읽어온다.
-----------------------------
커널에서 사용자 영역에 있는 버퍼로 옮기지 않는다. 
--------------------------
커널 내에서 복사 -> 사용자영역 -> 버퍼로 옮긴담에 다시 작성 커널에 쓰는 작업을 함. 
이 작업없이, 커널에서 파일을 ㅇ릭어서 읽은 내용을 바로 파일에 씀
쓴다. 

사용자 -> 커널 복사-> 커널 - > 커널 -> 파일
import os
dir(os) 
				# 인자가 없으면, 현재 로컬 scope에 있는 이름의 리스트를 돌려줌
				# 인자가 있으면, 해당 객체에 유효한 어트리뷰트들의 리스트를 돌려줌
help(os) 
				# 내장 도움말 시스템 호출
os.copy_file_range(src, dst, count, offset_src=None, offset_dst=None)때문에 생김
os 보다 쉽게 하는 연산 
----------------------------------------------------------------------------------------
이동 없이, 바로 복사
import shutil 
						# shuutil : 고수준 파일 연산, 파일과 폴더를 이동하거나 복사하고 싶을 때 사용
print(shutil.copyfile('data.db','archive.db')) 
						# 파일을 특정 폴더로 복사 
						# shutil.copy('복사할 파일명.확장자','복사한 파일을 담을 폴더명')
print(shutil.move('/build/executables','installdir')) 
						# 폴더를 특정 폴더로 이동
						# shutil.move('이동시킬 폴더명', '이동할 폴더를 담을 폴더명')

10.2 파일 와일드카드

  • glob : 디렉터리 와일드카드 검색
  • 현재 폴더 포함 하위 경로의 파일들을 검색할 때 사용함
import glob
print(glob.glob('*py'))
# glob.glob('참조하길 원하는 폴더의 경로/*.확장자')

10.3 명령행 인자

import sys
# sys : 시스템의 특정 파라미터와 함수
	# 파이썬 인터프리터가 제공하는 변수와 함수를 직접 제어할 수 있게 해주는 모듈
print(sys.argv)
# 명령행에서 인수 전달
import argparse
# 명령행 옵션, 인자와 부속 명령을 위한 **파서**
## 파서 : 파서가 **파싱** 작업을 하는 것
### 파싱 : 어떤 데이터를 원하는 모양으로 만들어 내는 것

parser = argparse.ArgumentParser(
    prog ='top',
    description ='Show top lines from each file')
# 인자값을 받을 수 있는 인스턴스 생성
parser.add_argument('filenames',nargs='+')
parser.add_argument('-l','--lines',type=int,default=10)
# 입력받을 인자값 등록
args = parser.parse_args()
# 입력받은 인자값을 args에 저장(type: namespace)
print(args)
#입력받은 인자값 출력

10.4 에러 출력 리디렉션과 프로그램 종료

  • stdin, stdout, stderr
  • stdin : 표준입력 (standard input) ⇒ input보다, 더 빠른 input이 가능함
    • input() vs sys.stdin
    • input() : 개행문자를 벗겨서 문자열로 변환하여 리턴해줌
    • sys.stdin : 모든 상호작용하는 입력에 사용됨
  • stdout : 표준 출력 (standard output)
    • print vs sys.stdout.wirte
      • print : 입력을 형식화(수정이 가능하지만, 기본적으로 인수와 개행 문자 사이에 공백이 있는) , 지정된 객체 쓰기 함수를 호출
      • sys.stdout: 화면 콘솔에 직접 출력을 표시하는데 사용함
  • stderr : 표준 에러 (standard error)
    • 표준출력은 < 써서 출력하는데 , 화면에 출력되어야 할때 .
    • 위치는 같은데 구분되서 사용됨
    • 표준출력과 구분해서 출력될 필요가잇을때
    • 에러일필요는 없음
  • sys.exit() : 스크립트 종료

# 파일에 대한 정보,

text 파일을 열때 f로 저장

→ sys.fdn in 에 대입, 표준입력이 파일로 바뀜, input함수 실행

→ 파일에서 정보를 일겅오게됨 ⇒ 아웃풋. txt → 파일객체 → 프린트함수 → 파일에 출력됨, 파일이라고 생각할 수 있음 파일로 출력되는 화면

무조건 화면에 출력시킬때, stderr 사용함


10.5. 문자열 패턴 매칭

  • re : 고급 문자열 처리를 위한 정규식 도구 제공
import re
re.findall(r'\\bf[a-z]*', 'which foot or hand fell fastest')
# f로 시작하는 알파벳 추출
print('tea for too'.replace('too', 'two'))
#too를 two 로 출력

10.6. 수학

import math
# math : 부동 소수점 연산을 위한 하부 C 라이브러리 함수들에 대한 액세스 제공
print(math.cos(math.pi/4))
print(math.log(1024,2))
import random
# random : 무작위 선택할 수 있는 함수
print(random.choice(['apple','pear','banana']))
# 세가지 중에 하나 출력
print(random.sample(range(100),10)) 
# 100까지 범위까지, 10개의 샘플 출력
print(random.random())
# float 범위내 랜덤 출력
print(random.randrange(6))
# 6까지의 범위중에 정수 랜덤 출력
import statistics
# 수치 데이터의 기본적인 통계적 특성 계산
data = [2.75, 1.75, 1.25, 0.25, 0.5, 1.25, 3.5]
print(statistics.mean(data))
# 데이터의 산술 평균
print(statistics.median(data))
# 데이터의 중간 값
print(statistics.variance(data))
# 데이터의 표본 분산

10.7. 인터넷 엑세스

from urllib.request 
# URL에서 데이터를 읽어옴
import urlopen
# URL open
with urlopen('<http://worldtimeapi.org/api/timezone/etc/UTC.txt>') as response:
    for line in response:
        line = line.decode()
        if line.startswith('datatime'):
            print(line.rstrip())
from smtplib
#잘안씀.
메일보내는건데 ,  smtp는 보안상 공개를 안해서 잘안씀
server = smtplib.SMTP('localhost')
server = sendmail('soothsayer@example.org','jcaesar@example.org',
"""<to:jcesar@example.org> 
From: soothsayer@example.org

Beware the Ides of March.
""")
server.quit()
</to:jcesar@example.org>

10.8. 날짜와 시간

from datetime import date
# datetime: 날짜와 시간을 조작하는 클래스
now = date.today()
now
print(now.strftime("%m-%d-%y, %d %b %Y is a %A on the %d day of %B."))
birthday = date(1964, 7 ,31)
age = now- birthday
print(age.days)

10.9. 데이터 압축

import zlib
# zlib : 데이터 보관 및 압축 형식 지원
# gzip : 파일 압축, 압축을 푸는 간단한 인터페이스 제공
# bz2 : 
s = b'witch which has which witches wrist watch'
print(len(s))
t = zlib.compress(s)
#압축
print(len(t))
print(zlib.decompress(t))
#압축해제
print(zlib.crc32(s))
#체크섬 계산

# lzma — LZMA 알고리즘을 사용한 압축
# 7zip : 여러 가지 내용들을 넣어서 해줘야함

10.10. 성능 측정

from timeit import Timer
# 작은 코드 조각의 실행 시간 측정
Timer('t=a; a=b; b=t','a=1; b=2').timeit()
#timeit.timeit(stmt='pass', setup='pass', timer=<default timer>, number=1000000, globals=None)
Timer('a.b =b.a','a=1; b=2').timeit()

10.11. 품질 관리

def average(values):
    return sum(values)/len(values)
import doctest
# doctest : 모듈을 훑어보고 프로그램의 독스트링들에 내장된 테스트들을 검사하는 도구 제공
doctest.testmod()

import unittest
# 포괄적인 테스트 집합을 별도의 파일로 관리할 수 있음
class TestStatisticalFunctions(unittest.TestCase):
    def test_average(self):
        self.assertEqual(average([20,30,70]),40.0)
        self.assertEqual(round(average([1,5,7]),1),4.3)
        with self.assertRaises(ZeroDivisionError):
            average([])
        with self.assertRaises(TypeError):
            average(20,30,70)
unittest.main()
#테스트

10.12. 배터리가 포함됨

반응형
LIST

'파이썬' 카테고리의 다른 글

[실습] 파이썬 튜토리얼에서 코드만 뽑아오기 [BeatifulSoup]  (0) 2022.08.22
11. 표준 라이브러리 -2  (0) 2022.08.21
8. 예외와 에러  (0) 2022.08.05
Class  (0) 2022.07.31
파일 읽기 쓰기  (0) 2022.06.30

댓글