1. 튜플

여러 가지 데이터 타입의 값을 저장할 수 있는, 변경 불가능(immutable)한 순서가 있는 컬렉션입니다.

(값을 바꿀 수 없음)

 

 

1. 생성

tu1 = (1,) # 요소를 튜플로 하나만 저장할 때는 끝에, 컴마를 넣어줌
print(tu1)
print(type(tu1)) #데이터에 컴마를 찍지 않고 숫자 하나만 입력할 경우 튜플이 아닌 숫자에 괄호를 입힌걸로 인식
더보기

(1,)

<class 'tuple'>

# 데이터 변경 불가
tu1[0] = 100 #TypeError: 'tuple' object does not support item assignment

 

 

tu2 = (1, 3, 5, 7)
print(tu2)
더보기

(1, 3, 5, 7)

tu3 = 1, 3, 5, 7
print(tu3)
print(type(tu3))
더보기

(1, 3, 5, 7)

<class 'tuple'>

tu4 = ('푸바오', '아이바오',('가','나','다'))
print(tu4)
print(tu4[0])
print(tu4[2][0])
print(type(tu4))
print(type(tu4[2]))
print(type(tu4[2][0]))
더보기

('푸바오', '아이바오', ('가', '나', '다'))

푸바오

<class 'tuple'>

<class 'tuple'>

<class 'str'>

tu5 = ('푸바오', '아이바오',['가','나','다'])
print(tu5)
print(tu5[2][0])
print(type(tu5))
print(type(tu5[2]))
print(type(tu5[2][0]))

#tu5[0] = '러바오' #튜플은 값 변경 불가 TypeError: 'tuple' object does not support item assignment
tu5[2][0] = '후이바오'
print(tu5)
더보기

('푸바오', '아이바오', ['가', '나', '다'])

<class 'tuple'>

<class 'list'>

<class 'str'>

('푸바오', '아이바오', ['후이바오', '나', '다'])

 

2. 인덱싱

tu1 = (1, 2, '푸바오', '러바오')
print(tu1[0])
print(tu1[-1])
더보기

1

러바오

 

3. 슬라이싱

tu1 = ( 1, 2,'푸바오', '러바오')
print(tu1[1:])
print(tu1[1:3])
더보기

(2, '푸바오', '러바오')

(2, '푸바오')

 

4. 연산

#튜플 간의 + 연산으로 리스트를 결합할 수 있고, * 연산으로 리스트를 반복할 수 있습니다.

tu1 = (10, 20, 30)
tu2 = (40, 50, 60)

print(tu1 + tu2)
print(tu2 + tu1)

tu1 = tu1 + (40, 50)
print(tu1)

print(tu1 * 3)
더보기

(10, 20, 30, 40, 50, 60)

(40, 50, 60, 10, 20, 30)

(10, 20, 30, 40, 50)

(10, 20, 30, 40, 50, 10, 20, 30, 40, 50, 10, 20, 30, 40, 50)

 

5. 언패킹

튜플의 항목들은 변수들에 할당될  있습니다. (리스트도 가능)

Lebao, Aibao = ('Fubao', 'Luibao')
print(Lebao)
print(Aibao)
더보기

Fubao

Luibao

 

6. 멤버십 테스트

in 연산자를 사용하여 튜플에 특정 값이 있는지 확인할  있습니다. (리스트도 가능)

print(2 in (2, 4, 6, 8, 10)) # 데이터 안에 2가 있다면 True 없다면 False
print(9 in (2, 4, 6, 8, 10))
더보기

True

False

 

7. 튜플의 정렬

튜플은 sort() 메서드를 제공하지 않습니다. sorted() 함수를 사용합니다.

tu1 = (1, 3, 2, 0)
tu1 = sorted(tu1) # sorted의 반환형은 리스트
print(tu1) #리스트로 출력
더보기

[0, 1, 2, 3]

 

8. 변환

튜플을 리스트로, 리스트를 튜플로 변환할 수 있습니다.

tu1 = (1, 2, 3, 4)
print(type(tu1))

# 튜플 -> 리스트 변환
li1 = list(tu1)
print(type(li1))

#리스트 -> 튜플 변환
tu2 = tuple(li1)
print(type(tu2))
더보기

<class 'tuple'>

<class 'list'>

<class 'tuple'>

 

 

2. input 함수

  • 사용자(개발자)에게 데이터를 입력받을 수 있는 함수
  • 데이터는 항상 문자형으로 입력됩니다.

 

 

# prompt: 선택 사항입니다. 사용자에게 입력을 유도하기 위한 메시지 또는 프롬프트를 나타내는 문자열입니다.

input([prompt])
name = input()
print(name)
더보기

류바옹

류바옹

 

name = input('이름 입력')
print(f'{name}님 안녕하세요')
더보기

이름 입력류딩

류딩님 안녕하세요

 

name, age, weight = '푸바오', 3, 100
print(name)
print(age)
print(weight)
더보기

푸바오

3

100

name, age, weight = input('이름, 나이, 체중을 차례대로 입력해주세요.').split(',') #푸바오,3,100 이런식으로 입력
print(name)
print(age)
print(weight)
더보기

이름, 나이, 체중을 차례대로 입력해주세요.

푸바오,3,100

푸바오

3

100

name = input('이름 입력 : ')
age = input('나이 입력 : ')
weight = input('무게 입력 : ')

print(name)
print(age)
print(weight)
더보기

이름 입력 : 푸바오

나이 입력 : 3

무게 입력 : 100

푸바오

3

100

 

num1 = input('첫번째 숫자를 입력하세요')
num2 = input('두번째 숫자를 입력하세요')
print('결과: ', num1 + num2) # str타입이므로 숫자가 이어서 나옴
더보기

첫번째 숫자를 입력하세요88

두번째 숫자를 입력하세요88

결과: 8888

 

# int(): 문자열을 숫자(정수)타입으로 변환

num1 = input('첫번째 숫자를 입력하세요 : ')
num2 = input('두번째 숫자를 입력하세요 : ')
print('결과: ', int(num1) + int(num2))
더보기

첫번째 숫자를 입력하세요 : 100

두번째 숫자를 입력하세요 : 100

결과: 200

 

 

문제

# 국어 영어 수학 점수를 한꺼번에 입력받아 총점과 평균을 구하는 프로그램을 작성

# 입력방법 : 100/80/85

 

 

# EX1

kor, eng, math = input('점수를 입력하세요 : ').split('/')
print('국어 : ',kor)
print('영어 : ',eng)
print('수학 : ',math)

all = (int(kor) + int(eng) +int(math))
av = all//3

print('총점 :' ,all)
print('평균 : ', av)
더보기

점수를 입력하세요 : 60/50/40

국어 : 60

영어 : 50

수학 : 40

총점 : 150

평균 : 50

 

# EX2

kor, eng, math = input('국어, 영어, 수학점수를 차례대로 입력하세요 ').split('/')
print(f'총점: {int(kor) + int(eng) + int(math)}')
print(f'평균: {(int(kor) + int(eng) + int(math))/3}')
print('평균: %.2f' % ((int(kor) + int(eng) + int(math))/3))
더보기

국어, 영어, 수학점수를 차례대로 입력하세요 50/60/40

총점: 150

평균: 50.0

평균: 50.00

1. 컬렉션 타입

여러 개의 데이터 항목을 하나의 단위로 관리할 수 있게 해주는 데이터 구조를 의미합니다. 이것은 여러 개의 데이터를 하나의 변수에 저장하고, 관리할 수 있게 해줍니다. 파이썬에서는 리스트, 튜플, 세트, 딕셔너리 등이 기본적인 컬렉션 타입에 속합니다.

 

 

2. 리스트

여러 값들을 하나의 변수에 저장하고 관리할 수 있게 해주는 순차적인 자료구조입니다.

(여러개의 저장공간이 나열되어 있는 것)

 

리스트의 사용 목적

1. 여러 번 선언하지 않고, 한번만 선언하기 위해 사용

2. 규칙성이 없는 값에 규칙성을 부여하기 위해 사용 (순서가 필요하면 리스트에 담는다.)

 

 

 

 

1. 생성

리스트는 대괄호 [ ] 사용하여 생성하며, 내부에 포함된  항목들은 쉼표로 구분됩니다.

list 선언
       list명 = [값, 값2, ...]                   # 어떤 값을 넣을 지 알 때
       list명 = [값] * 칸수                       # 값은 모르지만, 칸 수는 알 때
       list명 = []                              # 어떤 값인지도 모르고, 칸 수도 모를때
       list명 = list(range(start, end, step))

 

 

li1 =[1, 3, 5, 7, 9]
print(li1)
print(type(li1))
더보기

[1, 3, 5, 7, 9]

<class 'list'>

 

li2 = list([1, 3, 5, 7, 9])
print(li2)
print(type(li2))
더보기

[1, 3, 5, 7, 9]

<class 'list'>

 

li3 = ['푸바오', '아이바오', '러바오']
print(li3)
더보기

['푸바오', '아이바오', '러바오']

 

li4 = [1, 50.5, '푸바오', True]
print(li4)

print('=====리스트 안에 있는 개체들 타입 알기======')
print(type(li4[0]))
print(type(li4[1]))
print(type(li4[2]))
print(type(li4[3]))
더보기

[1, 50.5, '푸바오', True]

=====리스트 안에 있는 개체들 타입 알기======

<class 'int'>

<class 'float'>

<class 'str'>

<class 'bool'>

 

li1 = [1, 3, 5, 7, 9]
print(li1)
print(li1[0])
print(li1[-1])
print(li1[0] + li1[-1])
더보기

[1, 3, 5, 7, 9]

1

9

10

 

2. 인덱싱

리스트의  항목은 위치(인덱스) 가지고 있으며, 인덱스를 사용하여 접근할  있습니다. 인덱스는 0부터 시작합니다.

li2 = [1, 2, '파이썬', ['푸바오', '아이바오']] # 리스트 안에 리스트 : 2차원
print(li2)

print("======인덱싱=======")
print(li2[0])
print(li2[3])
print(li2[3][0])
더보기
[1, 2, '파이썬', ['푸바오', '아이바오']]
======인덱싱=======
1
['푸바오', '아이바오']
푸바오

 

li3 = ['푸바오', '아이바오', '러바오', ['🐼','🍎','⚽️','☕️']]
print(li3)
print(li3[-1])
print(li3[-1][2])
더보기

['푸바오', '아이바오', '러바오', ['🐼', '🍎', '⚽️', '☕️']]

['🐼', '🍎', '⚽️', '☕️']

⚽️

 

li4 = [1,2,3,['푸바오', '아이바오', '러바오', ['🐼','🍎','⚽️','☕️']]]
print(li4)
print("=======인덱싱=====")
print(li4[2])
print(li4[-2])
print(li4[-1][-2])
print(li4[-1][-1][-1])
더보기

[1, 2, 3, ['푸바오', '아이바오', '러바오', ['🐼', '🍎', '⚽️', '☕️']]]

=======인덱싱=====

3

3 러바오

☕️

 

3. 슬라이싱

리스트의 일부분만을 추출할  있습니다.

li1 = [10, 20, 30, 40 ,50]
print(li1)
print(li1[0:3]) # 인덱스 [0]부터 [2]까지 출력
더보기

[10, 20, 30, 40, 50]

[10, 20, 30]

 

 

인덱싱과 슬라이싱 주의점

  1. 인덱싱하면 차원 하나 벗겨짐
  2. 슬라이싱하면 차원 유지

 

 

4. 변경 가능

리스트의 항목들은 변경할  있습니다. , 리스트의 항목들을 수정, 추가, 삭제할  있습니다.

li2 = li1
print(li2)
li2[0] = 100 # [0]의 요소를 100으로 변경
print(li1)
print(li2)
더보기

[10, 20, 30, 40, 50]

[100, 20, 30, 40, 50]

[100, 20, 30, 40, 50]

 

li3 = [10, 20, 30,['푸바오', '아이바오', '러바오'], 40, ['🐼','🍎','⚽️','☕️']]
print(li3[2:6])

print(li3[5][:1])
더보기

[30, ['푸바오', '아이바오', '러바오'], 40, ['🐼', '🍎', '⚽️', '☕️']]

['🐼']

 

 

# 슬라이싱을 이용하여 리스트 데이터를 추가한 경우 리스트에 데이터만 포함

# 차원 유지

# 슬라이싱을 이용하여 리스트 데이터를 추가한 경우 리스트에 데이터만 포함
li4 = [10, 20, 30, 40, 50]
li4[1:2] = ['★','●','▲']
print(li4)
#차원 유지
더보기

[10, '★', '●', '▲', 30, 40, 50]

 

 

# 인덱싱을 이용하여 리스트 데이터를 추가한 경우 리스트에 데이터만 포함

# 차원 증가

# 인덱싱을 이용하여 리스트 데이터를 추가한 경우 리스트 안에 리스트를 포함
li4 = [10, 20, 30, 40, 50]
li4[1] = ['★','●','▲']
print(li4)
#차원 증가
더보기

[10, ['★', '●', '▲'], 30, 40, 50]

 

li5 = [10, 20, 30, 40, 50]
print(li5[1:3])
li5[1:3] = [] # 빈 리스트를 저장하면 요소가 삭제됨
print(li5)
del li5[2] # 변수 지우기 del
print(li5)
더보기

[20, 30]

[10, 40, 50]

[10, 40]

 

 

5. 연산

리스트 간의 + 연산으로 리스트를 결합할  있고, * 연산으로 리스트를 반복할  있습니다.

# 리스트 병합

#리스트 병합
li6 = [10, 20, 30]
li7 = [40, 50, 60]
print(li6 + li7)
print(li6[2] + li7[1])
더보기

[10, 20, 30, 40, 50, 60]

80

 

li6 = [10, 20, 30]

# inplace 연산
# li6 = li6 + [100,200] # li6 += [40, 50]
li6 += [500,600]
print(li6)
더보기

[10, 20, 30, 500, 600]

 

li6 = [10, 20, 30]
print(li6 * 3)
print(li6[0] + li6[2])

li6[1] = '푸바오'
print(li6)
#print(li6[0] + li6[1]) # 같은 타입이 아니면 연산이 안됨 
#TypeError: unsupported operand type(s) for +: 'int' and 'str'
더보기

[10, 20, 30, 10, 20, 30, 10, 20, 30]

40

[10, '푸바오', 30]

 

 

 

6. 함수와 메서드

리스트를 다루기 위한 여러 함수와 메소드들이 있습니다.

# len(): 객체의 길이(항목의 개수)를 반한하는 내장 함수

# len(): 객체의 길이(항목의 개수)를 반한하는 내장 함수
print(len(li6))

 

# append(): 리스트에 사용되며, 리스트의 끝에 새로운 항목을 하나만 추가하는 메서드

# append(): 리스트에 사용되며, 리스트의 끝에 새로운 항목을 하나만 추가하는 메서드
li6= [10, 20, 30]
print(li6)

li6.append(40)
print(li6)
li6.append([200,300])
print(li6)
더보기

[10, 20, 30]

[10, 20, 30, 40]

[10, 20, 30, 40, [200, 300]]

 

# extend(): 리스트에 iterable(반복 가능한 객체 : 순서를 부여받는 객체)의 모든 항목을 추가하는 메서드

# extend(): 리스트에 iterable(반복 가능한 객체 : 순서를 부여받는 객체)의 모든 항목을 추가하는 메서드
li6 = [10, 20 ,30]
print(li6)
li6.extend([50])
print(li6)
li6.extend([1000,2000]) # 여러 개 추가
print(li6)
더보기

[10, 20, 30]

[10, 20, 30, 50]

[10, 20, 30, 50, 1000, 2000]

 

# pop(): 리스트에서 항목을 삭제하고, 삭제된 항목을 반환하는 메서드

# pop(): 리스트에서 항목을 삭제하고, 삭제된 항목을 반환하는 메서드
li6 = [10, 20, 30]
print(li6)
print(li6.pop()) #인플레이스 연산
print(li6)
더보기

[10, 20, 30]

30

[10, 20]

 

li6 = [10, 20, 30]
result = li6.pop()
print(result)

 

# insert(): 리스트의 특정 인덱스에 항목을 추가하는 메서드

# insert(): 리스트의 특정 인덱스에 항목을 추가하는 메서드
li6 = [10, 20, 30]
li6.insert(1, 100) # 인덱스 1에 100추가 원래 인덱스1에 있던 요소는 2로 밀림
print(li6)
더보기

[10, 100, 20, 30]

li6.insert(1,[1000,2000])
print(li6)
더보기

[10, [1000, 2000], 100, 20, 30]

 

# index(): 리스트에서 특정 값의 인덱스를 반환하는 메서드. 특정 값의 인덱스가 없다면 에러발생

# index(): 리스트에서 특정 값의 인덱스를 반환하는 메서드. 특정 값의 인덱스가 없다면 에러발생
li6 = [10, 20, 30]
print(li6.index(20))  # 괄호요소의 인덱스 위치를 알려줌
#print(li6.index(40)) #없는 값은 에러 ValueError : 40 is not i list

 

# reverse(): 리스트의 항목들의 순서를 뒤집는 메서드

# reverse(): 리스트의 항목들의 순서를 뒤집는 메서드
li7 = [10, 13, 20, 30, 5]
li7.reverse()
print(li7)
더보기

[5, 30, 20, 13, 10]

li7 = ['푸바오', '아이바오', '러바오', '루이바오', '후이바오']
li7.reverse()
print(li7)
더보기

['후이바오', '루이바오', '러바오', '아이바오', '푸바오']

 

- 값 삭제
            list명.remove(값)             # 중복 시 먼저 나온 값(낮은 인덱스 값)이 삭제

            del(list명[인덱스])            # 인덱스로 삭제
            del list명[인덱스]

            list명.clear()               # 모든 값 삭제

※ 슬라이싱을 사용하여 리스트의 순서를 뒤집는 방법

슬라이싱(slicing) 파이썬에서 시퀀스 타입의 객체(: 리스트, 문자열, 튜플 ) 일부를 추출하는 방법입니다. 슬라이싱의 기본 구조는 [start:stop:step]입니다.

 

1. start: 슬라이스의 시작 인덱스입니다.  인덱스의 요소는 슬라이스에 포함됩니다. start 생략하면, step 양수이면 0, step 음수이면 -1 간주됩니다.

 

2. stop: 슬라이스의  인덱스입니다.  인덱스의 요소는 슬라이스에 포함되지 않습니다. stop 생략하면, step 양수이면 시퀀스의 , step 음수이면 시퀀스의 시작으로 간주됩니다.

 

3. step: 슬라이스의 스텝(증감) 값입니다. step 생략하면 1 간주됩니다.

li8 = ['푸바오', '아이바오', '러바오', '루이바오', '후이바오']
print(li8[::]) # 데이터 그대로 출력
print(li8[::-1]) # start와 stop을 생략하고 step을 -1로 설정한 슬라이싱

#[start : stop : step]
# start를 생략하면 -1로 간주. 즉, 시퀀스의 마지막 요소부터 시작
# stop을 생략하면 0으로 간주. 즉, 시퀀스의 시작까지 진행
# step이 -1이므로, 시퀀스의 요소를 뒤에서부터 앞으로 하나씩 건너뛰어서 슬라이싱
더보기

['푸바오', '아이바오', '러바오', '루이바오', '후이바오']

['후이바오', '루이바오', '러바오', '아이바오', '푸바오']

 

# sort(): 리스트의 항목들을 정렬하는 메서드.

# inplace 연산을 수행 변수에 담지 않아도 오름차순으로 저장이 됨

# sort(): 리스트의 항목들을 정렬하는 메서드. inplace 연산을 수행
li7 = [10, 13, 20, 30, 5]
li7.sort() # 오름차순
print(li7) # inplace연산이므로 재저장 오름차순대로 저장이됨
더보기

[5, 10, 13, 20, 30]

 

# sort(reverse=True) #내림차순

#sort(reverse=True) #내림차순
li7 = [10, 13, 20, 30, 5]
li7.sort(reverse=True)
print(li7)
더보기

[30, 20, 13, 10, 5]

 

li2 = ['Apple', 'apple', 'orange', 'banana', 'melon']
li2.sort() #아스키코드에 따라 오름차순
print(li2)
더보기

['Apple', 'apple', 'banana', 'melon', 'orange']

li8 = ['푸바오', '아이바오', '러바오', '루이바오', '후이바오']
li8.sort() #유니코드에 따라 오름차순
print(li8)
더보기

['러바오', '루이바오', '아이바오', '푸바오', '후이바오']

 

# sorted():  iterable(반복 가능한 객체)의 모든 항목들을 정렬한 후, 그 결과를 새로운 리스트에 담아 반환하는 함수

# inplace연산이 아니기 때문에 변화된 모습으로 남지않음, 따라서 변환값을 변수에 담아야함

# ✔ 비교
# sorted():  iterable(반복 가능한 객체)의 모든 항목들을 정렬한 후, 그 결과를 새로운 리스트에 담아 반환하는 함수
li10 = [ 10, 40, 30, 100, 90, 50]
print(sorted(li10)) #오름차순
print(sorted(li10, reverse=True)) #거꾸로
print(li10) #inplace연산이 아니기 때문에 변화된 모습으로 남지않음, 따라서 변환값을 변수에 담아야함

li10 = sorted(li10) # 반환값 변수에 담음
print(li10)
더보기

[10, 30, 40, 50, 90, 100]

[100, 90, 50, 40, 30, 10]

[10, 40, 30, 100, 90, 50]

[10, 30, 40, 50, 90, 100]

 

# count(): 리스트에서 특정 값의 개수를 반환하는 메서드

# count(): 리스트에서 특정 값의 개수를 반환하는 메서드
li11 = [10, 20, 30, 50, 20, 40, 30, 20]
print(li11.count(20)) #데이터 안에 똑같은 데이터가 몇개가 있는지 개수를 세줌
print(li11.count(16))

'컴퓨터 비전 > 파이썬 기초' 카테고리의 다른 글

6. 파이썬 컬렉션 타입 - 세트  (0) 2023.12.07
5. 파이썬 컬렉션 타입 - 튜플  (2) 2023.12.07
3. 문자열 다루기  (1) 2023.12.07
2. 파이썬의 변수  (1) 2023.12.07
1. 파이썬의 출력  (1) 2023.12.07

1. 문자열

  • 파이썬에서 문자열은 텍스트 데이터를 다루는 데 사용되는 중요한 데이터 타입입니다. 문자열은 작은 따옴표(')나 큰 따옴표("), 세 개의 따옴표(''', """)로 둘러싸인 텍스트로 표현됩니다.
str1 = '오늘도 즐거운 파이썬 수업'
print(str1)
str2 = "오늘도 즐거운 파이썬 수업"
print(str2)
str3 = '''푸바오:
오늘도 맛있는
    1 2 죽순
'''
print(str3)
더보기

오늘도 즐거운 파이썬 수업

오늘도 즐거운 파이썬 수업

푸바오:

오늘도 맛있는

        1 2 죽순

a = 'hello'
b = 'hello'
c = 'hello'
print(a is b)
print(a is c)
더보기

True

True

 

 

2. 문자열 재할당

  • 파이썬에서 문자열은 불변(immutable)한 데이터 타입이므로 같은 변수에 문자열을 재할당하는 경우, 새로운 문자열 객체가 생성되고 변수는 새로운 문자열 객체를 참조하게 됩니다. 이전 문자열 객체는 변경되지 않습니다.
# id() : 객체의 고유한 메모리 주소를 반환
text = 'Hello'
print(id(text))

text = 'Python' #재할당
print(id(text)) # 새로운 문자열 객체의 메모리 주소 출력
 
더보기

136649128347376

136649555358960

 

 

3. 문자열 함수와 연산자

3-1. len 함수

문자열의 길이를 반환

text = 'Hello, Fubao!'
print(len(text)) # 띄워쓰기 포함 합

 

3-2. 문자열 합치기(+)

두 문자열을 합쳐 새로운 문자열을 생성

name = '푸바오'
age = '3살'
msg = name + '는 ' + age
print(msg)
더보기

푸바오는 3살

 

3-3. 문자열 반복하기(*)

문자열을 여러 번 반복하여 새로운 문자열을 생성

apple = '🍎' * 10
print(apple)

Panda = '🐼' * 2
print(Panda)
더보기

🍎🍎🍎🍎🍎🍎🍎🍎🍎🍎

🐼🐼

 

3-4. 문자열 인덱싱과 슬라이싱

문자열 내부와 문자 인덱스를 사용하여 접근하거나 슬라이스함

str1 = '문자열 내부의 문자 인덱스를 사용하여 접근하거나 슬라이스함'
print(str1)
더보기

문자열 내부의 문자 인덱스를 사용하여 접근하거나 슬라이스함

# 인덱싱
print(str1[0])
print(str1[1])
print(str1[3])
print(str1[-12])
print(str1[-11])
print(str1[12])
더보기

 

 

# 슬라이싱
print(str1[0:6]) # 인덱스 0부터 6직전까지
print(str1[:15]) # 인덱스 0부터 15직전까지
print(str1[8:])  # 인덱스 8부터 끝까지
print(str1[:])   # 처음부터 끝까지

print("============================================")
print(str1[3:-7])
print(str1[3:-8])
print(str1[3:-9])
더보기

문자열 내부

문자열 내부의 문자 인덱스를

문자 인덱스를 사용하여 접근하거나 슬라이스함

문자열 내부의 문자 인덱스를 사용하여 접근하거나 슬라이스함 ============================================

내부의 문자 인덱스를 사용하여 접근하거

내부의 문자 인덱스를 사용하여 접근하

내부의 문자 인덱스를 사용하여 접근

 

 

4. 문자열 메서드

  • 문자열 메서드는 문자열 객체에 적용되는 함수로, 문자열을 조작하거나 변환하는 다양한 작업을 수행할 수 있게 해줍니다.

4-1. upper메서드와 lower 메서드

대문자 또는 소문자로 변환

text = "Fubao"
print(text.upper())
print(text.lower())
더보기

FUBAO

fubao

 

4-2. count메서드

특정 문자열의 등장 횟수 확인

text = 'Fubao Aibao Lebao'
print(text.count('o'))
print(text.count('ba'))
print(text.count('fu')) # 대소문자 구분, 찾지 못하면 0
더보기

3

3

0

 

4-3. find 메서드

특정 부분 문자열의 첫 번째 등장 위치(인덱스)를 확인

text = 'Fubao Aibao Lebao'
print(text.find('b'))
print(text.find('Ai'))
print(text.find('!')) # 찾지 못하면 -1
print(text.rfind('L')) #뒤에서 부터 찾기 (뒤에서 부터 먼저나오는 텍스트의 인덱스 출력)
print(text.find('o',5)) #인덱스 번호 5이후 부터 찾기
더보기

2

6

-1

12

10

 

4-4. replace메서드

문자열 대체

text = 'Fubao Aibao Lebao'
new_text = text.replace('Fubao', 'Panda')
print(new_text)
더보기

Panda Aibao Lebao

 

4-5. strip메서드

문자열의 양쪽 공백 제거

text = '     Hello, Fubao!       '
print(text)
print(text.strip())
더보기

                 Hello, Fubao!                        

Hello, Fubao!

 

4-6. split메서드

문자열을 분리

text = '푸바오 아이바오 러바오 루이바오 후이바오'
names = text.split()
print(names) # 리스트
더보기

['푸바오', '아이바오', '러바오', '루이바오', '후이바오']

text = '푸바오,아이바오,러바오,루이바오,후이바오'
names = text.split(',') # ','을 기분으로 분리
print(names)
더보기

['푸바오', '아이바오', '러바오', '루이바오', '후이바오']

 

4-7. join메서드

특정 문자와의 결합

text = 'Fubao'
print('🐼'.join(text))
더보기

F🐼u🐼b🐼a🐼o

 

4-8. startswith()와 endswith() 

접두사와 접미사 확인

text = 'Hello, Python!'
starts_with_hello = text.startswith('Hello')
ends_with_world = text.endswith("World!")

print(starts_with_hello)
print(ends_with_world)
더보기

True

False

 

 

'컴퓨터 비전 > 파이썬 기초' 카테고리의 다른 글

6. 파이썬 컬렉션 타입 - 세트  (0) 2023.12.07
5. 파이썬 컬렉션 타입 - 튜플  (2) 2023.12.07
4. 파이썬 컬렉션 타입 - 리스트  (2) 2023.12.07
2. 파이썬의 변수  (1) 2023.12.07
1. 파이썬의 출력  (1) 2023.12.07

1. 변수

  • 변수는 프로그래밍에서 데이터를 저장하고 관리하는 데 사용되는 중요한 개념입니다. 변수는 이름이 붙은 메모리 공간으로, 값을 저장하거나 참조할 때 사용됩니다.
name = '푸바오'
age = 3
weight = 100

print('%s 의 나이는 %d살 체중은 %dkg' %(name, age, weight))
더보기

푸바오 의 나이는 3살 체중은 100kg

name = '러바오'
print('%s의 나이는 %d살 체중은 %dkg' %(name, age, weight))
더보기

러바오의 나이는 3살 체중은 100kg

name = input(str("이름 :"))
age = input(str("나이 :"))
print('%s의 나이는 %s살' %(name, age))
더보기

이름 :푸바오

나이 :3

푸바오의 나이는 3살

 

 

2.변수 이름 작성하는 방법

  • 파이썬 변수는 대소문자를 구분하며, 예약어 (예: if, while, for 등)는 변수 이름으로 사용할 수 없습니다. 변수 이름은 알파벳으로 시작해야 하며, 숫자나 특수문자는 첫 글자로 올 수 없습니다. 변수 이름은 의미있고 알아보기 쉬운 이름으로 지정하는 것이 좋습니다.
num1 = 10
num2 = 3
print('%d/%d = %4.2f' %(num1,num2, num1/num2))
더보기

10/3 = 3.33

 

 

3. 변수의 자료형

  • 파이썬은 동적 타이핑(dynamic typing) 언어로, 변수의 타입을 선언할 필요 없이 값을 할당할 때 자동으로 타입을 추론합니다. 이는 프로그래머가 변수의 타입을 직접 명시할 필요 없이 더 유연하게 코드를 작성할 수 있는 장점을 제공합니다. 그렇지만 이로 인해 잘못된 타입의 값이 변수에 할당되는 상황도 발생할 수 있습니다.
name = '푸바오'
print(type(name))

age = 3
print(type(age))

weight = 50.5
print(type(weight))

isLover = True #False
print(type(isLover))
더보기

<class 'str'>

<class 'int'>

<class 'float'>

<class 'bool'>

 

4. 변수 삭제

  • 변수를 삭제하기 위해 del 문을 사용할 수 있습니다. del 문은 지정된 변수를 제거하고 해당 메모리 공간을 해제합니다. 변수가 삭제되면 해당 이름으로 변수에 더 이상 접근할 수 없습니다.
isLober = False
print(isLover)
del isLover
print(isLover)
더보기
True
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-10-c7ba738eede6> in <cell line: 4>()
      2 print(isLover)
      3 del isLover
----> 4 print(isLover)

NameError: name 'isLover' is not defined

 

변수가 삭제되어 변수를 불러올수 없어 NameError 발생

name1 = '푸바오'
name2 = name1

del name1
print(name2)
더보기

푸바오

 

'컴퓨터 비전 > 파이썬 기초' 카테고리의 다른 글

6. 파이썬 컬렉션 타입 - 세트  (0) 2023.12.07
5. 파이썬 컬렉션 타입 - 튜플  (2) 2023.12.07
4. 파이썬 컬렉션 타입 - 리스트  (2) 2023.12.07
3. 문자열 다루기  (1) 2023.12.07
1. 파이썬의 출력  (1) 2023.12.07

1. print()

  • print() 함수는 파이썬의 기본 출력 함수로, 터미널이나 콘솔 창에 텍스트나 데이터를 출력하기 위해 사용
print('Hello', 'Python')

print('Hello', 'Python', 'Hi', 'Python')

print('Hello', end='.....')
print('Python')

print('Hello', end = ' ')
print('Python')

print('Hello', end='❤ ')
print('Python')
더보기

Hello Python

Hello Python Hi Python

Hello.....Python

Hello Python

Hello❤ Python

 

 

 

2. 파이썬의 escape 문자

  • 파이썬에서 이스케이프 문자는 문자열 안에서 특별한 의미를 가지는 문자들을 나타내기 위해 사용됩니다. 이스케이프 문자는 백슬래시()로 시작하며, 문자열 내에서 특정한 동작이나 특수 문자를 표현하기 위해 사용됩니다.

\n 줄 바꿈
\t 탭 출력
\\ 백 슬래시 표시
\"  or  \'  큰 따옴표, 작은 따옴표 표시 (문자열을 감싸는 따옴표와 구분하기 위해 사용)
\r 캐리지 리턴 표시 (문자열 출력 후 커서를 줄의 처음으로 이동)
\b 문자열 내에서 한 글자 삭제

 

 

print("Hello\nPython")
print("Name\t푸바오")
print("푸바오는 죽순이 맛있어 : \\")
print("푸바오. \"훅!\"")
더보기

Hello

Python

Name                푸바오

푸바오는 죽순이 맛있어 : \

푸바오. "훅!"

 

3. print 함수내의 연산

  • print() 함수는 문자열뿐만 아니라 숫자와 연산 결과도 출력할 수 있습니다.
print("덧셈 :", 10 + 3)
print("뺄셈 :", 10 - 3)
print("곱셈 :", 10 * 3)
print("나눗셈 :", 10 / 3)
print("정수 나눗셈 :", 10 // 3)
print("나머지 :", 10 % 3)
print("거듭제곱 :", 10 ** 3)
더보기

덧셈 : 13

뺄셈 : 7

곱셈 : 30

나눗셈 : 3.3333333333333335

정수 나눗셈 : 3

나머지 : 1

거듭제곱 : 1000

print(10 + 5)
print(10 - 5)
print(10 * 5)
print(10 / 5)
print('10 + 5')
#print('10' + 5) #TypeError: can only concatenate str (not "int") to str
더보기

15

5

50

2.0

10 + 5

 

4.주석문

  • 파이썬 주석은 코드 내에 프로그래머가 작성한 설명이나 메모를 포함하는데 사용됩니다. 주석은 코드를 이해하고 다른 개발자와 협업하는 데 도움이 되며, 코드의 기능과 목적을 명확하게 설명할 수 있습니다. 주석은 프로그램 실행 중에 무시되므로 코드 실행에 영향을 미치지 않습니다.

 

print('파이썬 출력하기') # 문자열 출력은 작은따옴표 '' 또는 큰따옴표 ""를 사용함
더보기

파이썬 출력하기

 

'''
이것은 여러 줄 주석입니다.
여러 줄 주석은 큰따옴표 세 개 또는 작은따옴표 세 개 사이에 작성됩니다.
여러 줄에 걸쳐 설명을 적을 수 있습니다.
'''
print('파이썬 출력하기')
더보기

파이썬 출력하기

5. 출력서식 지정

  • 파이썬의 print() 함수는 출력 서식을 지정하여 값을 형식화하고 출력하는 기능을 제공합니다. 서식 지정자와 함께 사용되는 % 연산자와 format() 메서드를 사용하여 원하는 형식으로 출력할 수 있습니다.
print('정수 : %d' %100)
print(f'정수 : {100}')
print('정수 : %d' %100.5)
print('실수 : %f' %100.5)
print('실수 : %f' %100)
print('문자열: %s' % 'Python')
print('문자열: %s' % 100)
더보기

정수 : 100

정수 : 100

정수 : 100

실수 : 100.500000

실수 : 100.000000

문자열: Python

문자열: 100

print('5 + 3 = 8')
print('%d + %d = %d' %(5, 3, 5+3 ))
더보기

5 + 3 = 8

5 + 3 = 8

print('%5d' %100)
print('%5d' %100)
print('%05d' %100)
더보기

    100

    100

00100

print('%.2f' %22222)
print('%6.2f' %123.45) # 6 : 총 자리수(점 포함), 2 : 소수 자리
print('%6.2f' %123.4) # 남은 자리는 0으로 채움
더보기

22222.00

123.45

123.40

# 5 / 3 = ?
print ('%d / %d = %d' %(5, 3, 5/3))
print ('%d / %d = %f' %(5, 3, 5/3))
print ('%d / %d = %4.2f' %(5, 3, 5/3))
더보기

5 / 3 = 1

5 / 3 = 1.666667

5 / 3 = 1.67

#'{} {}'.format('푸바오', '아이바오')
#인덱스 : 0부터 순서대로 진행되는 정수
print('{} - {}'.format('푸바오', '아이바오'))
print('{0} - {1}'.format('푸바오', '아이바오'))
print('{1} - {0}'.format('푸바오', '아이바오'))
더보기

푸바오 - 아이바오

푸바오 - 아이바오

아이바오 - 푸바오

print('이름 :  %s, 나이 : %d' %('푸바오', 3))
print('체중 : %2.f ' %96.3333)
print('판다 : {} {}'.format('아이바오','푸바오'))
더보기

이름 : 푸바오, 나이 : 3

체중 : 96

판다 : 아이바오 푸바오

 

'컴퓨터 비전 > 파이썬 기초' 카테고리의 다른 글

6. 파이썬 컬렉션 타입 - 세트  (0) 2023.12.07
5. 파이썬 컬렉션 타입 - 튜플  (2) 2023.12.07
4. 파이썬 컬렉션 타입 - 리스트  (2) 2023.12.07
3. 문자열 다루기  (1) 2023.12.07
2. 파이썬의 변수  (1) 2023.12.07

Streamlit

  • 파이썬으로 데이터 분석을 위한 웹앱을 쉽게 개발할 수 있게 도와주는 라이브러리
  • https://streamlit.io/

 

# 설치

# window
pip install streamlit

# mac
pip3 install streamlit

 

 

# 설치 확인 및 데모 확인

streamlit hello

 

 

#실행

- 터미널에서 입력

streamlit run 파일명

 

 

 

 

import streamlit as st

st.title('hi streamlit')
st.write('텍스트 구간')

'''
# 여기는 제목입니다.
### 여기는 작은 제목입니다.
- 첫번째 요소
- 두번째 요소
- 세번째 요소
'''

text = st.text_input('여기에 입력')
st.write(text)

selected = st.checkbox('개인정보 사용에 동의하시겠습니까?')
if selected:
    st.success('동의했습니다')

market = st.selectbox('시장',('코스닥','코스피','나스닥'))
st.write(f'선택된 market : {market}')

options = st.multiselect('종목',['카카오', '네이버','삼성','엘지'])
st.write(','.join(options))

st.metric(label='카카오', value= '40,000원', delta= '-1,000원')

 

# 실행 화면

 

'컴퓨터 비전 > 웹 서비스' 카테고리의 다른 글

Jinja 템플릿 엔진  (0) 2023.12.18
FastAPI  (0) 2023.12.16
픽사베이  (1) 2023.12.03
인스타그램  (1) 2023.12.03
셀레니움  (0) 2023.12.02

1. 이미지 수집하기

* [픽사베이](https://pixabay.com/ko/)

 

import chromedriver_autoinstaller
import time
from selenium import webdriver
from urllib.request import Request, urlopen
import ssl
ssl._create_default_https_context = ssl._create_unverified_context


driver = webdriver.Chrome()
url = 'https://pixabay.com/ko/images/search/음식/'
driver.get(url)

 

 

# 이미지가 있는 주소창 xpath
image_area_xpath = '/html/body/div[1]/div[1]/div/div[2]/div[3]/div'

# 예시용 하나의 이미지 xpath
image_xpath = '/html/body/div[1]/div[1]/div/div[2]/div[3]/div/div/div[1]/div[1]/div/a/img'

 

# 예시용 하나의 이미지 url가져오기

image_url = driver.find_element('xpath',image_xpath).get_attribute('src')
print('image_url:', image_url)

 

# 예시용 하나의 이미지를 나의 컴퓨터 파일안에 저장하기

- 사진을 pic.jpg 라는 이름으로 저장

image_byte = Request(image_url, headers={'User-Agent':'Mozilla/5.0 (X11; Linux x86_64)'})
f = open('pic.jpg','wb') # w: write, r: read, a: append, b: binary, t: text
f.write(urlopen(image_byte).read()) 
f.close()

 

 

 

2. 여러개 이미지 수집하기

 

from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
url = 'https://pixabay.com/ko/images/search/음식/'
driver.get(url)
time.sleep(3)


image_area_xpath = '/html/body/div[1]/div[1]/div/div[2]/div[3]/div'
image_area = driver.find_element(By.XPATH, image_area_xpath)
image_elements = image_area.find_elements(By.TAG_NAME, 'img')

image_urls = [] #내용을 담을 빈 리스트

for image_element in image_elements:
    image_url = image_element.get_attribute('data-lazy-src')
    if image_url is None: # 주소가 없을시 src로 주소 뽑기
        image_url = image_element.get_attribute('src')
    print(image_url)
    image_urls.append(image_url) # image_urls 리스트에 주소 추가

 

from urllib import parse
import os

for i in range(len(image_urls)):
    image_url = image_urls[i]
    url = parse.urlparse(image_url) # 이미지 경로를 가져옴 / parse: 접속해서 데이터를 가져온후 저장까지 해줌 
    name, ext = os.path.splitext(url.path) #파일이름, 확장명

    image_byte = Request(image_url, headers={'User-Agent':'Mozilla/5.0 (X11; Linux x86_64)'})
    f = open(f'pic{i}.jpg','wb') # w: write, r: read, a: append, b: binary, t: text
    f.write(urlopen(image_byte).read()) 
    f.close()

 

 

 

3. 함수로 리팩토링

  • crawl_and_save_image(keyword, pages)
  • os.mkdir('음식') /open('음식/파일이름.jpg', 'wb')

 

def crawl_and_save_image(keyword, pages):
    image_urls = []
    for i in range(1, pages+1):
        url = f'https://pixabay.com/ko/images/search/{keyword}/?pagi={i}'
        # print(url)
        
        driver.get(url)
        time.sleep(3)
        image_area_xpath = '/html/body/div[1]/div[1]/div/div[2]/div[3]/div'
        image_area = driver.find_element(By.XPATH, image_area_xpath)
        image_elements = image_area.find_elements(By.TAG_NAME, 'img')
        
        for image_element in image_elements:
            image_url = image_element.get_attribute('data-lazy-src')
            if image_url is None:
                image_url = image_element.get_attribute('src')
            print(image_url)
            image_urls.append(image_url)
    
    
    if not os.path.exists(keyword):
        os.mkdir(keyword)
    
    
    for i in range(len(image_urls)):
        image_url = image_urls[i]
        
        # https://cdn.pixabay.com/photo/2016/12/26/17/28/spaghetti-1932466_1280.jpg
        filename = image_url.split('/')[-1]
        image_byte = Request(image_url, headers={'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko)'})
        f = open(f'{keyword}/{filename}', 'wb')
        f.write(urlopen(image_byte).read())
        f.close()
driver = webdriver.Chrome()
crawl_and_save_image('음식', 2)

'컴퓨터 비전 > 웹 서비스' 카테고리의 다른 글

FastAPI  (0) 2023.12.16
Streamlit  (2) 2023.12.03
인스타그램  (1) 2023.12.03
셀레니움  (0) 2023.12.02
크롤링(Crawling)  (0) 2023.12.02

1. 로그인

# 크롬창으로 인스타그램 홈 들어가기

import chromedriver_autoinstaller
from selenium import webdriver

driver = webdriver.Chrome()

url = 'http://www.instagram.com/'
driver.get(url)

 

# 아이디 비밀번호 입력후 로그인

#인스타로그인
id = '<나의 아이디>'
pw = '<나의 비밀번호>'


#아이디/비밀번호 칸 copy full xpath/  
input_id = driver.find_element('xpath', '/html/body/div[2]/div/div/div[2]/div/div/div/div[1]/section/main/article/div[2]/div[1]/div[2]/form/div/div[1]/div/label/input')
input_pw = driver.find_element('xpath', '/html/body/div[2]/div/div/div[2]/div/div/div/div[1]/section/main/article/div[2]/div[1]/div[2]/form/div/div[2]/div/label/input')


input_id.send_keys(id)
input_pw.send_keys(pw)

# 로그인 버튼 클릭
driver.find_element('xpath','/html/body/div[2]/div/div/div[2]/div/div/div/div[1]/section/main/article/div[2]/div[1]/div[2]/form/div/div[3]').click()

 

 

2. 해시태그 검색

# 검색할 해시태그 'ootd'

 

hashtag = 'ootd'
url = f'https://www.instagram.com/explore/tags/{hashtag}/'
driver.get(url)

 

 

3. 스크롤 내리기

import time

for _ in range(1): #스크롤을 한번만 내림
    driver.execute_script('window.scrollTo(0, document.body.scrollHeight)') 
    # 안에 자바스크립트 문법을 쓸 수 있다. 0부터 끝까지 스크롤 이동
    #time.sleep(3) #3초 쉬고 스크롤내리기

 

 

4. 원하는 사진 클릭하기

pic = '/html/body/div[2]/div/div/div[2]/div/div/div/div[1]/div[1]/div[2]/section/main/article/div/div/div/div[1]/div[3]/a'
driver.find_element('xpath',pic).click()

 

 

5. 좋아요 클릭

like = '/html/body/div[8]/div[1]/div/div[3]/div/div/div/div/div[2]/div/article/div/div[2]/div/div/div[2]/section[1]/span[1]/div'
driver.find_element('xpath', like).click()

 

 

6. 댓글달기

comment = '/html/body/div[8]/div[1]/div/div[3]/div/div/div/div/div[2]/div/article/div/div[2]/div/div/div[2]/section[3]/div/form/div/textarea'
msg = '★'
driver.find_element('xpath', comment).click()
driver.find_element('xpath', comment).send_keys(msg)

btn = '/html/body/div[8]/div[1]/div/div[3]/div/div/div/div/div[2]/div/article/div/div[2]/div/div/div[2]/section[3]/div/form/div/div[2]/div'
driver.find_element('xpath',btn).click()

'컴퓨터 비전 > 웹 서비스' 카테고리의 다른 글

FastAPI  (0) 2023.12.16
Streamlit  (2) 2023.12.03
픽사베이  (1) 2023.12.03
셀레니움  (0) 2023.12.02
크롤링(Crawling)  (0) 2023.12.02

# Jupyter Notebook 주요 단축키
* Enter: 일반 모드에서 편집 모드로 전환
* ESC: 편집 모드에서 일반 모드로 전환

 

* ▶︎일반 모드 단축키
  * A: 선택된 셀 위에 새로운 셀 추가
  * B: 선택된 셀 아래에 새로운 셀 추가
  * X: 선택된 셀 잘라내기
  * C: 선택된 셀 복사
  * V: 선택된 셀 아래에 붙여넣기
  * D, D: 선택된 셀 삭제
  * Z: 셀 삭제 취소

* ▶︎편집 모드 단축키
  * Ctrl + Z: 되돌리기
  * Ctrl + Y: 되돌리기 취소
  * Ctrl + A: 셀 내용 전체 선택
  * Ctrl + Home: 셀 맨 위로 이동
  * Ctrl + End : 셀 맨 아래로 이동
  * Ctrl + D: 현재 줄 삭제
  * Tab: 자동 완성 기능 사용

 

1. 셀레니움

  • 셀레니움은 브라우저를 컨트롤 할 수 있도록 지원하는 라이브러리

 

# 셀레니움 설치

# window
!pip install selenium

# mac
!pip3 install selenium

 

# 크롬 드라이버 설치

# window
!pip install chromedriver_autoinstaller

# mac
!pip3 install chromedriver_autoinstaller
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome() #창 띄우기
driver.get('http://www.google.com') #구글이동
search = driver.find_element('name', 'q') # find_element: 태그에서 하나 찾기 :name에서 q만 찾기
search.send_keys('날씨') # 검색창에 날씨 입력
search.send_keys(Keys.RETURN) # 검색

 

 

2. 네이버 웹툰

네이버웹툰 베스트댓글과 전체댓글 크롤링하기

  • https://comic.naver.com/webtoon/detail?titleId=641253&no=471&week=fri
driver = webdriver.Chrome() #창 띄우기
driver.get('https://comic.naver.com/webtoon/detail?titleId=641253&no=471&week=fri') # 네이버 웹툰으로 이동
!pip3 install bs4

 

# 베스트 댓글 크롤링하기

from bs4 import BeautifulSoup
soup = BeautifulSoup(driver.page_source)
comment_area = soup.findAll('span', {'class':'u_cbox_contents'})
print(comment_area)
print('********베스트 댓글*****************')
for i in range(len(comment_area)):
    comment = comment_area[i].text.strip() # 텍스트만 뽑고 공백삭제
    print(comment)
    print('-' * 30)

 

 

# 전체댓글 크롤링하기

 

  • Xpath: 기존의 컴퓨터 파일 시스템에서 사용하는 경로 표현식과 유사한 경로 언어
  • Copy full Xpath
  • 크롤링을 원하는 위치를 클릭후 우클릭으로 개발자모드(F12/option+control+I) -> Copy -> Copy full Xpath로 경로복사
  • /html/body/div[1]/div[5]/div/div/div[5]/div[1]/div[3]/div/div/div[4]/div[1]/div/ul/li[2]/a/span[2]
driver.find_element('xpath','/html/body/div[1]/div[5]/div/div/div[5]/div[1]/div[3]/div/div/div[4]/div[1]/div/ul/li[2]/a/span[2]').click
soup = BeautifulSoup(driver.page_source)

commentall_area = soup.findAll('span', {'class':'u_cbox_contents'})
print(commentall_area)
print('********전체 댓글*****************')
for i in range(len(commentall_area)):
    comment = commentall_area[i].text.strip() # 텍스트만 뽑고 공백삭제
    print(comment)
    print('-' * 30)

'컴퓨터 비전 > 웹 서비스' 카테고리의 다른 글

FastAPI  (0) 2023.12.16
Streamlit  (2) 2023.12.03
픽사베이  (1) 2023.12.03
인스타그램  (1) 2023.12.03
크롤링(Crawling)  (0) 2023.12.02

1. 데이터

데이터(data)는 정보나 사실들의 원시적이고 구조화되지 않은 형태입니다. 이것은 숫자, 문자, 이미지, 소리 등 다양한 형태로 나타날 수 있습니다. 예를 들면, 온도 측정 결과, 사진, 글, 음성 녹음 파일 등이 데이터에 해당합니다.

 

2. 데이터베이스

데이터베이스(database)는 관련된 데이터를 체계적으로 저장하고, 관리하고, 검색할 수 있도록 설계된 전자적 시스템입니다.

간단히 말하면, 데이터베이스는 "정보의 보관소"와 같습니다. 데이터베이스를 사용하면 크거나 작은 양의 데이터를 안전하게 저장하고 필요할 때 쉽게 찾아낼 수 있습니다.

 

 

3. 데이터베이스 관리 시스템

DBMS는 데이터베이스 관리 시스템(Database Management System)의 약자입니다. DBMS는 데이터베이스를 생성하고, 유지하고, 조작하기 위한 소프트웨어 도구의 집합입니다. 일반적으로 DBMS는 두 가지 유형으로 나뉩니다.

 

RDBMS (관계형 데이터베이스 관리 시스템): 데이터를 테이블 형태로 저장하며, 테이블 간의 관계를 정의할 수 있는 시스템입니다. 예로는 Oracle, MySQL, Microsoft SQL Server, PostgreSQL 등이 있습니다.

NoSQL DBMS: 관계형 모델을 사용하지 않는 데이터베이스 시스템으로, 큰 데이터 량이나 유동적인 데이터 구조를 지원하기 위해 설계되었습니다. 예로는 MongoDB, Cassandra, Redis 등이 있습니다.

 

 

4. MongoDB

MongoDB(몽고디비)는 NoSQL 데이터베이스 시스템 중 하나로, 문서 지향(document-oriented) 데이터베이스입니다. 이는 관계형 데이터베이스와는 다르게 데이터를 테이블이 아니라 JSON 스타일의 BSON(Binary JSON) 형식의 문서로 저장합니다. MongoDB는 개발자가 유연하게 데이터를 저장하고 쿼리할 수 있도록 하는 목적으로 만들어진 것이며, 대규모의 분산 데이터베이스 환경에서도 잘 동작합니다.

 

문서 지향 데이터베이스: MongoDB는 데이터를 BSON 형식의 문서로 저장합니다. 이 문서는 키-값 쌍(key-value pairs)으로 이루어져 있으며, 여러 종류의 데이터 유형을 포함할 수 있습니다.

스키마 없음 (Schema-less): 관계형 데이터베이스와 달리 MongoDB는 데이터베이스의 스키마를 명시적으로 정의하지 않습니다. 이는 동적인 스키마를 사용하여 데이터 모델을 유연하게 변경할 수 있도록 합니다.

유연한 데이터 모델: MongoDB는 다양한 데이터 형식을 지원하며, 중첩된 문서와 배열을 허용하여 복잡한 데이터 구조를 표현할 수 있습니다.

분산 데이터베이스: MongoDB는 여러 서버에 데이터를 분산하여 저장하고 처리할 수 있는 분산 데이터베이스 시스템을 지원합니다.

5. MongoDB Cloud

MongoDB Cloud는 MongoDB 데이터베이스를 클라우드 환경에서 제공하는 서비스입니다. MongoDB Cloud는 MongoDB, Inc.가 제공하는 공식 클라우드 서비스로서, MongoDB를 쉽게 관리하고 배포할 수 있도록 도와줍니다. 이 서비스는 데이터베이스 클러스터를 호스팅하고 관리하며, 사용자는 몽고DB 클라우드를 통해 데이터베이스를 쉽게 설정하고 확장할 수 있습니다.

클라우드 접속

https://www.mongodb.com/atlas/database

MongoDB Shell 다운로드

https://www.mongodb.com/try/download/shell

MongoDB Shell 다운 후 Mogosh 에서 실습

 

데이터베이스 확인

show databases

 

데이터베이스 생성

use aiproject

 

컬렉션 생성

db.createCollection("user")

 

컬렉션 확인

show collections

 

데이터 추가

db.user.insert({userid: "apple", name: "김사과", age: 20})

 

데이터 조회

db.user.find() 

​

db.user.find({"userid":"apple"})

 

데이터 수정

db.user.update({userid: "apple"}, {$set: {age: 25}})

 

 

데이터 삭제

db.remove.remove({userid:"apple"})

 

 

데이터베이스 확인방법

상단메뉴 Data Services -> Overview왼쪽메뉴에서 Database선택 후 -> Browse Collections 클릭

 
 

 

 

데이터 확인


Colab 실습

 

  • pymongo 설치
!pip install pymongo

 

from pymongo import MongoClient


url = "mongodb+srv://<나의 아이디>:<나의 비밀번호>.mongodb.net/?retryWrites=true&w=majority"
client = MongoClient(url)
print(client)
database = client['aiproject']
collection = database['user']
user_insert = {"userid" : "Fubao", "name" : "푸바오", "age": 3}
result = collection.insert_one(user_insert)
print(f'입력된 데이터 ID{result.inserted_id}

output

더보기

>> 입력된 데이터 ID655decc05ec49026ad1c476f

 

# 데이터 조회

# 데이터 조회
user_find = {"userid" :"Fubao"}
result = collection.find_one(user_find)
print(f'데이터:{result}')

output

더보기

데이터:{'_id': ObjectId('655decc05ec49026ad1c476f'), 'userid': 'Fubao', 'name': '푸바오', 'age': 3}

 

# 데이터 수정

# 데이터 수정
user_update = {"userid":"Fubao"}
new_value = {"$set":{"age":31}}
collection.update_one(user_update, new_value)
print('데이터 변경 성공')

output

더보기

데이터 변경 성공

 

# 데이터 삭제

# 데이터 삭제
user_delete = {"userid":"Fubao"}
collection.delete_one(user_delete)
print("데이터 삭제 성공")

output

더보기

데이터 삭제 성공

 

'컴퓨터 비전 > DBMS' 카테고리의 다른 글

파이참에서 aws, MySQL 연결하기  (0) 2024.01.19
MySQL  (0) 2024.01.18