본문 바로가기
Python

[파이썬] 파이썬 정리2

by AI미남홀란드 2021. 1. 24.
728x90

print(dir(str)) 을 해보면 쓸 수 있는 메소드, 함수들이 뜬다.

__len__ , __ge__ , __mul__ , __ne__ 등 엄청 많이 나온다

-> 항상 str 이 소유한 메소드 , 함수, 속성등을 확인하고 한다면 정말 좋다

 

**str 

-> 문자의 모임(문자열)을 나타내기 위한 클래스

-> str은 자신에게 작업을 하지 않기 때문에 작업을 하는 함수를 호출하면 그 결과를 리턴

-> 대소문자 구분, 좌우 공백 제거, 특정 문자열의 포함 여부, 인코딩 등이 중요합니다.

 

#str이 소유한 메소드나 속성을 확인

print(dir(str))

-> 비밀번호를 제외한 영문은 대부분 대소문자를 구분하지 않기 때문에 모두 대문자나 모두 소문자로 변경하고 사용하는 것이 좋다.

사용자의 입력 실수를 줄이기 위해 좌우 공백을 제거하는 것도 바람직한 처리 방법 중 하나. 컴퓨터를 사용하기 전에 타자기를 사용하던

사람들은 마지막에 Enter들을 여러 번 습관이 있습니다.

 

msg='     helloPython      '
result=msg.strip().lower()      # 스트립 공백제거 , 로우어 영 소문자 변환
#lower()안에 아무것도 없으므로 매개변수를 줄 필요가 없고
#return이 있으므로 결과를 다른 곳에 저장해서 사용할 수 있습니다
#리턴을 하는 함수를 호출한 경우에 연속해서 다른 함수를 호출 할 수 있다.
#이걸 메소드 체이닝 이라고 한다
print(result)
결과 hellopython 

print(msg.find('python')) -> 존재하지 않아서 -1
print(msg.find('Python')) -> 9라고 뜬다.
#find는 문자열에 포함된 데이터의 위치를 리턴하는 함수
#문자열이 없으면 -1을 리턴

-> 프로그래밍에서 정수로 결과가 나오거나 정수를 대입해야 하는 상황에서 음수가 나올 수 가 없는데 -1 을 사용하는 경우가 있다.

이런 경우의 -1은 가장 큰 숫자 입니다.(1의 2의 보수이다) (컴퓨터는 마이너스가 없당)

-1 은 1의 2의 보수이다.

0001(2)

1의 보수를 구하는 방법 0->1 1->0 으로 치환한다

1110(2)

2의 보수를 구하는 방법

1을 더한다 

1111(2)

가장 큰 수가 된다.(무한)

 

-> 문자열 인코딩 

컴퓨터가 문자열을 저장하기 위해서 사용하는 방법

영문과 숫자는 ASCII code 라고 하는 1가지 방법으로만 인코딩 하기 때문에 어떤 종류의 컴퓨터 또는 프로그래밍 언어이고 동일하게

저장이 됩니다. (A=65 , a=97)

 

한글은 여러가지 인코딩 방식이 있어서 인코딩 방식이 맞지 않으면 제대로 디코딩 되지 않는다.

 

한글 인코딩

  -> windows에서 사용했던 ms949(cp949)

  -> web에서 사용했던 euc-kr

  -> 최근에 거의 모든 시스템에서 사용하는 utf-8

파이썬이나 R의 예제들은 거의 대부분을 utf-8을 사용합니다.

 

my-sql 같은 데이터베이스는 iso-8859-1 이라는 인코딩을 사용해서 기본적으로 한글이 지원되지 않는다.

* 파이썬에 문자열을 인코딩 할 때는 문자열.encode('인코딩 방식') 을 써준다.

* 인코딩 된 바이트 배열을 가지고 문자열을 생성할 때 : 바이트.decode('인코딩 방식')

  msg='파이썬'

b=msg.encode('utf-8')

print(b)

#b가 가진 내용을 ms949로 디코딩해서 출력 - 인코딩과 디코딩 방식이 다르기 때문에

#에러가 발생하거나 할글이 깨지게 됩니다

#print(b.decode('ms949'))

print(b.decode('utf-8'))  --> 파이썬 출력

** bytes

-> 바이트의 모임

byte는 8개의 비트(bit - 0 과 1 둘 중에 하나를 표시) 를 의미하는 것으로 컴퓨터에서 정보를 표현하는 취소 단위

 

->네트워크가 파일에서 떼이터를 읽을 때 사용합니다.

파일이나 네트워크 에서 데이터를 가져올 때 인코딩 방식이 동일하다라는 전제가 있다면 문자 단위로 데이터를 가져오는 것도 가능합니다.

 

인코딩 방식이 다르거나 문서 파일이 아니면 bytes를 이용해서 데이터를 가져온 후 디코딩을 하거나 파일로 다시 생성해서 사용해야 합니다.

-> bytes는 한 번 생성되면 내용을 수정할 수 없는 immutable 타입 입니다.

 

** list

-> 데이터의 연속적인 모임

-> 파이썬은 list에 어떤 자료형의 데이터건 저장이 가능합니다.

실제로는 비교 가능한 동일한 자료형의 데이터만 저장해야 합니다.

ex) [10,'라면'] 되지만 하지 않는다. 숫자와 문자열은 비교가 되지 않음

 

-> 내부데이터를 변경할 수 있고 크기를 동적으로 변경 가능합니다.

1. 생성

[]: 비어있는 리스트

[데이터 나열] : 기본 데이터를 가진 리스트

list(__iter__가 구현된 데이터 :  list , str , tuple 등)

2. 데이터 추가 및 갱신 , 삭제 , 접근

-> 데이터 접근 :  list이름[인덱스] , list 이름 [시작위치 : 종료다음위치: 간격]

 

-> 데이터 추가(Create) : list이름.append(데이터) , list이름.insert(위치 , 데이터)

-> 데이터 갱신(Update : 데이터접근 = 변경할 데이터

-> 데이터 삭제(Delete) : del 데이터 접근

 

3. 전체 데이터 접근

for 임시변수 in list이름 : 

 

4. 데이터 개수

len(list이름)

 

5. pop 과 push

-> pop은 데이터를 꺼내는 동작(지우가 가져옵니다.)을 의미하고 push 는 데이터를 추가하는 것

 

6. 다른 list 추가

-> + 나 extend 라는 함수를 이용

#리스트 생성

#프로그래밍에서는 직접 입력하지 않는 경우가 많다. 

#대부분의 경우에는 읽어온다.

li = [1,3,5,7]

li2 = ['zico','dok2','thequiet','jaypark','swings','beenzino','kid']

 

#전체 데이터 확인

print(li2)

#4번째 데이터 확인

print(li2[3])

#데이터 추가

li2.append('nafla')

 

#데이터 수정

li2[6] = 'simondominic'

# 데이터 개수 확인

print(len(li2))

#전체 데이터 접근

 

for rapper in li2:

    print(rapper)

7. 데이터 정렬

-> list 처럼 여러 개의 데이터를 가진 데이터의 모임은 검색과 정렬이 필수

-> list의 경우는 sort(key=none , reverse=false)

key는 정렬에 이용할 함수이고 , reverse는 true를 설정하면 내림차순이 됩니다.

-> scala 데이터로 구성된 list는 아무것도 입력하지 않으면 부등호로 비교해서 오름차순 정렬(직은 것에서 큰 것 순)을 해줍니다.

li3 = ["android ","Macmini",'Linux',"ios","ipad",'apple']

print(li3)

#li 의 데이터를 오름차순 정렬

#대문자는 65 A 에서 시작

#소문자는 97 a 에서 시작

li3.sort()

print(li3)

# 내림차순 정렬

li3.sort(reverse=True)

print(li3)

#모두 소문자로 변경

li3.sort(key=str.lower)

print(li3)

#글자수를 가지고 내림차순

 

li3.sort(key=len,reverse=True)

print(li3)

8. list 안에 list 포함 가능

-> 중첩 list라고 합니다.

특별한 경우에는 일반 데이터도 이렇게 만들지만 일반 데이터는 이렇게 만드는 것을 비추천하고 일반 데이터의 경우는 이런 경우

list를 dict로 묶고 dict의 list를 만들어서 처리하는 것을 권장합니다.

 

일반적인 데이터를 다루는 분야 와 데이터 기술 통계 분석 분야에서 dict list를 많이 사용합니다.

 

이런 데이터는 이미지 데이터 그리고 머신 러닝을 위한 데이터는 이 구조로 만들어져야 합니다.

# list의 list 생성
lis = [["python","javascript"],["mysql","oracle"]]

for temp in lis:
    for data in temp:          #이중 반복문을 통해 출력이 가능하다 
        print(data) 

9. 기존 list의 데이터를 이용해서 list 생성

->[임시변수를 가지고 연산 for 임시변수 in 리스트]

리스트를 임시변수에 하나씩 대입해서 앞의 연산을 수행할 결과를 가지고 새로운 list를 만들어서 리턴합니다.

 

-> [임시변수를 가지고 연산 for 임시변수 in 리스트 if 임시변수를 이용한 조건식]

조건식에 맞는 data만 연산을 수행

for temp in lis:

    for data in temp:

        print(data)

 

li = [10,20,30,50,70,90]

 

data = [k+5 for k in li]

 

print(data)

#30보다 작은 데이터만 5를 더해서 list를 생성

data = [k+5 for k in li if k<30]

print(data)

** tuple

-> 순서대로 저장하는 데이터의 모임으로 내부 데이터를 변경할 수 없습니다.

-> 인덱싱(1개 가져오는 것), 슬라이싱(범위를 가지고 골라내는 것), 연결하기 , 반복하기 등은 가능

 

1. 생성

변수이름 = (데이터를 나열) : 데이터가 1개이면 이 경우에는 마지막에 , 를 추가

 

변수이름, 변수이름 , ... = 데이터 나열

 

2. namedtuple

-> 튜플의 이름을 만들어서 튜플의 모양을 계속해서 사용할 수 있도록 하고 튜플들의 구성요소에도 이름을 붙이는 것

 

-> collections 패키지의 namedtuple 의 impor 해야 합니다.

 

튜플이름 = namedtuple('전체이름' , ' 각 구성요소의 이름을 공백으로 구분해서 나열')

 

-> 데이터를 생성

변수이름 = 튜플이름(데이터나열)

 

-> 데이터 접근

변수이름[인덱스] ([0],[1]) 이런식으로 가능하고 또는 변수이름.구성요소이름

from collections import namedtuple

#튜플의 이름을 생성

Person = namedtuple('person','bunho name age')

#튜플의 데이터를 생성

 

person1 = Person(1,'adam','24')

person2 = Person(2,'강진축구','22')

 

print(person1[1])

print(person2.name)

 

#데이터베이스에서 튜플이라고 하면 이것은 하나의 행이다.

-> 데이터베이스의 데이터를 읽어서 저장할려고 할 때 많이 이용하고 , 데이터 분석 라이브러리에서 결과를 만들어 줄 때 많이 이용합니다.

데이터 분석 라이브러리에서 결과가 나오면 결과를 확인하는 것도 중요하지만 어떤것을 포함하고 있는지 확인하는 습관을 가져야 함

 

데이터베이스에서 튜플이라고 하면 이것은 하나의 행이다.

Board = namedtuple('board','num title writer date')

 

boardlist = []

 

board= Board('1','안녕하세여','mapo',2021-12-29)

boardlist.append(board)

 

board= Board('2','안녕히가세요','usa',2021-12-30)

boardlist.append(board)

 

#출력

for board in boardlist:

    print(board.num , board.title,board.writer,board.date)

 

**set

-> 데이터를 순서와 상관없이 중복되지 않고 저장하는 데이터의 모임

-> set 과 frozenset(한 번 생성되면 내부의 데이터를 변경하지 못함)

1. 생성

비어 있는 set을 생성하는 경우에는 set()

 

다른 종류의 데이터의 모임을 가지고 생성 set(데이터)

 

직접 데이터를 설정해서 생성 { 데이터 나열 }

 

2. 데이터 추가는 add(데이터)

 

3. 데이터 제거

clear() <- 전체 데이터가 제거가 됨

discard(데이터) : 데이터가 없으면 삭제하지 않습니다.

remove(데이터) : 데이터가 없으면 에러

update([데이터나열]) : 데이터 수정

pop() : 1개의 데이터를 삭제하면서 리턴

 

4. 집합연산 

union( 다른 set)

intersect(다른 set)

difference(다른 set)

symmetric_difference(다른 set)

 

5. 활용

-> 스마트 폰에서는 앱이나 노래 등을 저장할 때 이용


** dict(dictionary 나 map 이라고 합니다.)                                                      **중요**

-> key 와 value  쌍으로 데이터를 저장하는 구조

-> key 는 중복될 수 없고 순서도 없습니다.

-> key 는 특별한 경우가 아니면 문자열로 만듭니다.

-> value 는 모든 종류의 데이터가 가능합니다.

-> namedtuple 과 비슷하게 여러 개의 데이터를 하나로 묶기 위해서 사용합니다.

( 얘 는 만들 때 이름을 생성한다)

-> 거의 모든 프로그래밍 언어에서 이 구조를 사용합니다.

1. 생성

{key:value, key:value .... }

 

2. 데이터 읽기

딕셔너리이름[key]

 

존재하지 않는 key를 대입하면 에러가 발생합니다.

 

3. 데이터 추가 및 수정

딕셔너리이름[key] = 데이터

-> 존재하는 key 이면 데이터가 수정되는 것이고 존재하지 않는 key이면 데이터를 추가 합니다.

 

4. 데이터 삭제

del 딕셔너리이름[key]

clear(): 모든 데이터 삭제 

 

5. for를 이용하면 딕셔너리의 key가 순서대로 대입됩니다.

#항상 앞의 데이터는 key이고 , 뒤의 데이터는 value 값이다.

dic = {'language':'english', 'database':'sql'}

#없는 key에 대입하면 추가

dic['framework']='flask'

print(dic)

#존재한 key에 값을 갱신

dic['framework']='janggo'

print(dic)

#for를 이용해서 순회하면 key가 전달됩니다.

for key in dic:

    print(key)

 

#이 방법을 이용하면 dict의 key를 출력해 볼 수 있다.

for key in dic:

    print(key,':',dic[key])

# 데이터 내용제거
dic.clear()
print(dic)
-> 결과 : {} 아무것도 뜨지 않는다.

** 데이터 모임 끼리의 변환

range(시작숫자 , 종료값 , 간격)

bytes

str

list

tuple

set

-> 하나의 데이터 묶음

dict는 key와 value의 2개의 묶음

 

-> 하나의 데이터 묶음끼리는 자료형이름(하나의 데이터 묶음) 으로 변환 가능

 

dict의 일부분을 하나의 데이터 묶음으로 변환할때는 

자료형 이름(dict.keys()) 또는 자료형이름(dict.values())

 

-> 하나의 자료형 2개를 가지고 dict를 만들 때는 dict(zip(데이터1 , 데이터2))

 

-- 파이썬의 자료형 에 대해 알아보았습니다.

 

** 파이썬 제공 모듈 

-> 파이썬을 설치할때 파이썬 재단이 같이 제공하는 모듈로 별도의 설치 없이 사용할 수 있는 모듈

-> 날짜 데이터 처리 , 스레드 처리 모듈 , 네트워크 처리 모듈 , 운영체제 명령어나 파일 처리 모듈은 프로그램을 개발을 할 때 필수 요소라서 대다수의 언어가 기본적으로 제공을 합니다.

 

1. 날짜 및 시간이 - 표현

-> time stamp : 컴퓨터에서 시간을 표시하는 일반적인 방법으로 1970년 1월 1일 자정을 기준으로 해서 초 나 밀리초 단위로 시간을 계산하는 방식(컴퓨터)

 

-> UTC : 1972년 시행된 국제 표준시(모바일)

 

1) struct_time

-> timestampe를 년 , 월 , 일 , 시 , 초 , 요일 , 1년 중 지나온 날짜 등으로 분할 해 놓은 것

2)time 모듈

time(): 현재 시간을 float 값으로 리턴

sleep(sec) : 현재 작업을 sec 초 만큼 대기

gmttime()
localtime()

-> 웹의 html을 모으는 것을 스크래핑이라고 한다.

여러 곳에서 데이터를 스크래핑할 때 주의할 점은 연속해서 스크래핑을 하게 되면 시스템이 다운 되는 경우가 있습니다.

이럴 때는 중간에 sleep을 약간씩 주게되면 이러한 문제가 해결됩니다.

 

3) datetime 패키지

-> 하위 클래스 

datetime : 날짜 + 시간

date: 날짜

time: 시간

timedelta : 시간 차이

tzinfo : 시간대 정보

 

-> datetime 클래스 *****

시계열 데이터 분석에서는 이 자료형을 이용합니다.

시계열 데이터는 시간에 따라 변화하는 데이터

대표적인 시계열 데이터

 

생성

    datatime(년 , 월 , 일)[, 시 , 분 , 초])

today() : 현재 날짜 및 시간으로 생성

 

문자열 변환

   인스턴스.strftime('서식')

   서식은 %Y, %m , %d , %H , %M , %S

 

속성 : year , month , day , hour , minute , second , microsecond , tzinfo

import time

 

print("hello")

sleep.time(10) <- 10초 뒤에 나옴

print("python")

from datetime import datetime

# datetime 패키지에서 datetime 클래스만 가져옵니다

# 가져올 때 현재 모듈에 포함시키므로 datetime이라고만 작성하면 된다

 

dt = datetime.now()

print(dt)

 

#년도 만 추출

print(dt.year)

 

#원하는 포맷으로 출력

 

print(dt.strftime('%Y %m %d %H %M %S'))

 

 

 

 

 

 

 

728x90

'Python' 카테고리의 다른 글

[파이썬] 쓰레드  (0) 2021.01.30
[파이썬] 파이썬의 모듈  (0) 2021.01.30
[파이썬] 파이썬의 정리  (0) 2021.01.23
[파이썬] 추상*****  (0) 2021.01.23
[파이썬] 상속  (0) 2021.01.23