본문 바로가기

개발 공부/Python

프로그래밍 시작하기 : 파이썬 입문 8. 기본 함수~9.파일 쓰기

 

프로그래밍 시작하기 : 파이썬 입문(Inflearn Original)

 

8. 파이썬 기본 함수

8-1. Built-in Functions : 내장 함수는 굳이 안외우셔도 되요.

 

 

 

# 파이썬 내장함수(Built in)
# 자주 사용하는 함수 위주로 실습
# 사용하다보면 자연스럽게 숙달

# str(), int(), tuple() -> 형변환

# 절대값 : abs()

# al, any : iterable 요소 검사(참, 거짓)
print(all([1, 2, 3]))  # and
print(any([1, 2, 0])) # or

# chr : 아스키 -> 문자, ord : 문자-> 아스키
print(chr(67))
print(ord('C'))

# enumerate : 인덱스 + Iterable 객체 생성
for i, name in enumerate(['abc', 'bcd', 'efg']):
    print(i, name)

 

# filter : 반복가능한 객체 요소를 지정한 함수 조건에 맞는 값 추출
def conv_pos(x):
    return abs(x) > 2

print(list(filter(conv_pos, [1, -3, 2, 0, -5, 6])))

# 람다식
print(list(filter(lambda x : abs(x) > 2, [1, -3, 2, 0, -5, 6])))

 

# id : 객체의 주소값(레퍼런스) 반환

print(id(int(5)))
print(id(4))

# len
print(len('abcdef'))
print(len([1, 2, 4, 5, 6, 5]))

 

# max, min
print(max([1, 2, 3]))
print(max('python study'))

 

# map : 반복가능한 객체 ㅇ소를 지정한 함수 실행 후 추출
def conv_abs(x):
    return abs(x)

print(list(map(conv_abs, [1, -3, 2, 0, -5, 6])))

 

 

# pow : 제곱값 반환
print(pow(2, 10))

#range : 반복 가능한 객체Iterable반환
print(range(1, 10, 2))
print(list(range(1, 10,2)))

# round :반올림
print(round(117.247, -2))
print(round(4231.232))

# sorted : 반복가능한 객체Iterable
print(sorted([2,5,2,1,4]))

# sum
print(sum([4,2,3,1]))
print(sum(range(1, 101)))

# type 자료형 확인
#zip : 반복가능한 객체의 요소를 묶어서 반환
print(list(zip([10, 20, 30], [40, 50, 60])))
print(list(zip(['a', 'b', 'c'], [1, 2])))

zip 함수는 tuple로 반환한다.

 

 

 

 

8-2. External Functions : 외장 함수에는 편리한 것들이 많아요.

 

# 실제 프로그램 개발 중 자주 사용
# sys, pickle, shutill, tempfile, time, random

# 예제1
import sys
print(sys.argv)

# 예제 2 (깡제 종료)
# sys.exit()

# 예제 3 (파이썬 패키지 위치)
print(sys.path)

# 예제 3 (파이썬 패키지 위치)
print(sys.path)

# pickle : 객체 파일 쓰기
import pickle

# 예제 4(쓰기)

f = open("test.obj", 'wb')
obj = {1: 'python', 2:'study', 3:'basic'}
pickle.dump(obj, f)  # 쓰기
f.close()
# 읽기
f= open('test.obj', 'rb')
data = pickle.load(f)
print(data, type(data))
f.close()

pickle은 객체를 읽고 쓸 때 사용.

 

 

# os : 환경 변수, 디렉토리(파일) 처리 관련, 운영체제 작업 관련
# mkdir, rmdir(비어 있으면 삭제), rename

import os
print(os.environ)

 

 

print(os.environ["USERNAME"])
print(os.environ["ATOM_HOME"])

# 현재 경로
print(os.getcwd())

 

import time
# 시간
print(time.time())
print(time.localtime(time.time()))   # time을 형태 변환할 수 있다.
print(time.ctime())

 

 

print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))

 

print()

# 시간 간격 발생
for i in range(5):
    print(i)
    time.sleep(2)

# random : 난수 리턴
import random

print(random.random())
print(random.randint(1, 45))   # 1~45
print(random.randrange(1, 45))  # 1~44

 

 

 

# 섞기
d = [1, 2, 3, 4, 5]
random.shuffle(d)
print(d)

c = random.choice(d)
print(c)

# webbrowser : 본인 OS의 웹 브라우저 실행
import webbrowser
webbrowser.open("http://google.com")
webbrowser.open_new("http://google.com")

 

 

9. 파이썬 파일 쓰기

9-1. 결과를 파일에 쓸 수 있어야 해요.

 

 

# 파일 읽기 및 쓰기

# 읽기 모드 : r, 쓰기 모드 w, 추가 모드 a, 텍스트 모드 t, 바이너리 모드 b

# 파일 읽기 (Read)
f = open('./it_news.txt', 'r', encoding='UTF-8')
# 맨 뒤의 인수는 인코딩 방법. euc-kr 등.
# 속성 확인
print(dir(f))
print(f.encoding)
print(f.name)
print(f.mode)

cts = f.read()
print(cts)

f.close()

 

 

 

with open('./it_news.txt', 'r', encoding='UTF-8') as f:
    c = f.read()
    print(c)
    print(iter(c))
    print(list(c))
# close를 호출하지 않아도 내부적으로 닫힌다.

print()

 

 

 

# read() : 전체 읽기, read(10)

with open('./it_news.txt', 'r', encoding='UTF-8') as f:
    c = f.read(10)
    print(c)
    c = f.read(10)
    print(c)
    f.seek(0, 0)   # 초기로 감.
    c = f.read(20)
    print(c)

# 커서가 있어 어디까지 읽었는지 내부적으로 기억하고 있다.

print()

line = f.readline() 으로 한 줄씩 읽어올 수 있다.

readlines : 전체를 읽은 후 라인 리스트로 저장.

 

 

with open('./it_news.txt', 'r', encoding='UTF-8' as f:
	cts = f.getlines()
    print(cts)
    print()
    for c in cts:
    	print(c, end='')

 

print()

# 파일 쓰기(write)
with open('./contents1.txt', 'w') as f:
    f.write("I love python\n")

# w 처음부터 쓰기
# a 이어쓰기

# wrtielines: 리스트로 되어 있는 것을 파일로 쓸 수 있음.


with open('./contents1.txt', 'w') as f:
    list = ['Orange\n', 'Apple\n', 'Banana\n']
    f.writelines(list)
with open('./contents1.txt', 'w') as f:
    print("Write", file=f)

 

이렇게 하면 print로 file에 쓸 수 있다.

 

 

9-2. CSV 파일은 생소하지 않으시죠?

 

# CSV 파일 읽기 및 쓰기
# CSV : MEME - text/csv

import csv

with open('./resource/test1.csv', 'r') as f:
    reader = csv.reader(f)
    #객체 확인
    print(reader)
    #타입 확인
    print(type(reader)) # _csv.reader
    print(dir(reader)) # 속성
    print()

    next(reader)  # Header skip 하는 메소드
    for c in reader:
        # print(c)
        # 타입 확인(리스트)
        # print(type(C))
        # list to str
        print(' '.join(c))



with open('./resource/test2.csv', 'r') as f:
    reader = csv.reader(f, delimiter='|')  # 내가 원하는 구분 기호로 가져올 수 있음.

    next(reader)  # Header skip 하는 메소드
    for c in reader:
        print(c)
        


with open('./resource/test2.csv', 'r') as f:
    reader = csv.DictReader(f)
    print(reader)
    print(type(reader))
    print(dir(reader))
    print()

    for c in reader:
        for k, v in c.items():
            print(k, v)
        print('-------------')

 

 

import csv

w = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
with open('./write1.csv', 'w', encoding='utf-8') as f:
    print(dir(csv))
    wt = csv.writer(f)

    #dir 확인
    print(dir(wt))
    print(type(wt))

    for v in w:
        wt.writerow(v)

 


import csv

w = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
with open('./write1.csv', 'w', encoding='utf-8') as f:
    fields = ['One', 'Two', 'Three']
    wt = csv.DictWriter(f, fieldnames = fields)
    wt.writeheader()

    for v in w:
        wt.writerow({'One' : v[0], 'Two': v[1], 'Three': v[2]})