Python

Python - 10. 중요 모듈 (수학, 파일 입출력)

꿀먹는매미 2021. 3. 11. 11:51

많이 쓰이는 중요 모듈중에서 수학과 관련된 모듈이 있다.

 

대부분의 수학관련 함수가 math 모듈에 존재하지만 자주 사용되는 함수들은 내장 함수로 제공되고 있다.

 

sum( iterable[, start] ) - 총합(시작값 x -> 0 )

max

min

abs

pow

round

divmod

 

 

  • Math 모듈

소수점 올림 / 내림 / 버림

# math01.py
import math

# 올림
print( math.ceil( 3.4 ) )
print( math.ceil( 3.5 ) )
print( math.ceil( 3.6 ) )

# 내림
print( math.floor( 3.4 ) )
print( math.floor( 3.5 ) )
print( math.floor( 3.6 ) )

# 버림(정수부분만 반환)
print( math.trunc( 3.4 ) )
print( math.trunc( 3.5 ) )
print( math.trunc( 3.6 ) )

 

추가적으로 다양한 수치연산과, 지수, 로그 연산, 삼각함수 연산을 제공

분수모듈(fractions) / 십진법모듈(Decimal) 도 있음

 

  • Random 모듈
# random01.py
import random

# 0 <= x < 1 실수
print( random.random() )
print( random.random() )
print( random.random() )

# 3 <= x < 4 실수
print( random.uniform( 3, 4) )
print( random.uniform( 3, 4) )
print( random.uniform( 3, 4) )

# 0 <= x < 10 정수
print( int( random.random() * 10 ) )
print( int( random.random() * 10 ) )
print( int( random.random() * 10 ) )

print( random.randint( 0, 10 ) )
print( random.randint( 0, 10 ) )
print( random.randint( 0, 10 ) )

range(0, 10)
print( random.randrange(10) )
print( random.randrange(10) )
print( random.randrange(10) )

# 0 <= x < 20 정수 10개 중복없이 추출
print( random.sample( range(20), 10 ) )

 

 

 

 

  • 파일시스템
    • os / glob / tree
# os03.py
import os

# 입력받은 정보를 절대경로로 반환
print( os.path.abspath( 'tmp' ) )

# 입력받은 경로의 파일크기 반환
print( os.path.getsize( 'C:\\python\\python3.9\\python.exe' ) )

# isfile / isdir
print( os.path.isfile( 'C:\\python\\python3.9\\python.exe' ) )
print( os.path.isdir( 'C:\\python\\python3.9\\python.exe' ) )

# join / split
print( os.path.join( 'C:\\python\\', 'python3.9', 'python.exe' ) )
print( os.path.join( 'C:\\python3\\', 'C:\\python\\python3.9', 'python.exe' ) )

print( os.path.split( 'C:\\python\\python3.9\\python.exe' ) )

 

 

  • glob - 윈도우의 dir / 리눅스의 ls 명령어와 유사한 기능

glob() - 모든 파일 및 디렉터리의 리스트 반환

iglob() - 이터레이터를 반환해서 원하는대로 출력 가능

# glob01.py
import glob

#print( glob.glob( 'c:Python/*' ) )
#print( glob.glob( './*' ) )

for file in glob.iglob( './*' ) :
    print( file )

 

  • tree - os.path와 glob을 이용해서 tree 구조 만들기
# tree01.py
import glob, os.path
ndir = nfile = 0

def traverse( dir, depth ):
    global ndir, nfile
    for obj in glob.glob( dir + '/*' ):
        if depth == 0:
            prefix = '|--'
        else:
            prefix = '|' + '  ' * depth + '|--'
        if os.path.isdir( obj ):
            ndir += 1
            print( prefix + os.path.basename(obj) )
            traverse( obj, depth + 1 )
        elif os.path.isfile( obj ):
            nfile += 1
            print( prefix + os.path.basename( obj ) )
        else:
            print( prefix + 'unknown object :', obj )
            
if __name__ == '__main__':
    traverse( '.', 0 )
    print( '\n', ndir, 'directories,', nfile, 'files' )

 

 

  • 파일 입출력 (p.179~)

 

  • 파일 열기 / 쓰기

open() - 파일 열기 ( 디폴트: 텍스트 쓰기모드 wt )

            'w' - 쓰기모드 / 'r' - 읽기모드 / 'a' - 쓰기 + 이어쓰기

            / 'b' - 바이너리 모드 / 't' - 텍스트 모드 / '+' - 읽기 + 쓰기 모드

write() - 문자열 쓰기

writelines() - 문자열 여러줄 쓰기

close() - 파일 닫기 (열었으면 반드시 닫기 해줘야함)

# ex01.py
f = open( './test1.txt', 'w', encoding='utf-8' )
#f = open( './test1.txt', 'a', encoding='utf-8' )
#print( f )

'''
f.write( 'Hello\n' )
f.write( 'Hello\n' )
f.write( 'Hello\n' )
'''

lines = [ 
    'Hello 1\n',
    'Hello 2\n',
    'Hello 3\n'  
]

f.writelines( lines )

print( '저장 완료' )

f.close();
#print( f.closed ) # close 여부를 반환

 

  • 파일 읽기 - readline() / readlines()
# ex02.py
print( '시작' )
try:
    f = open( './test1.txt', 'r', encoding='utf-8' )
    #print( f )
    
    #read() - binary 파일 읽을때 (한 바이트씩)
    '''
    line = f.readline()
    print( line, end='' )
    
    line = f.readline()
    print( line, end='' )
    '''
    
    while True:
        line = f.readline()
        if not line:
            break
        print( line, end='' )
        
    f.close()
except FileNotFoundError as e:
    print( '[에러] ', e )
print( '끝' )

# ex03.py
print( '시작' )

try:
    f = open( './test1.txt', 'r', encoding='utf-8' )

    #lines = f.readlines()
    #print( lines )
    
    for line in f.readlines():
        print( line, end='' )
        
    f.close()
except FileNotFoundError as e:
    print( '[에러] ', e )
    
print( '끝' )

 

 

  • pickle - 리스트나 클래스 등의 입출력을 다룰때 사용

리스트 방식 데이터 쓰기

# ex04.py
import pickle

f = open( './pickle.dat', 'wb' )

colors = [ 'red', 'green', 'black' ]
pickle.dump( colors, f )

print( '저장 완료' )

f.close()

pickle.dat 파일 열었을 때

 

리스트 방식 데이터 읽어오기

# ex05.py
import pickle

f = open( './pickle.dat', 'rb' )

colors = pickle.load( f )
print( colors )

f.close()

 

클래스 객체 파일에 저장하고 불러오기

# ex06.py
import pickle

class test:
    var = None
    
a = test()
a.var = 'Test'
f = open( 'test', 'wb' )
pickle.dump( a, f )
f.close()
f = open( 'test', 'rb' )
b = pickle.load(f)

f.close()
print( b )
print( b.var )

 

 

 

  • 우편번호 검색기 만들기
# zipcodeSearch01.py
f = open( './zipcode_seoul_utf8_type2.csv', 'r', encoding='utf-8' )

for line in f.readlines():
    #print( line, end='' )
    addresses = line.split( ',' )
    #print( addresses[3] )
    
    if addresses[3].startswith( '신사' ) :
        print( addresses[0], addresses[1], addresses[2], addresses[3], addresses[4], addresses[5] )

f.close()