Python

Python BASIC COURSE

황소의일격 2021. 8. 12. 23:47
Python Basic YouTube: https://youtu.be/kWiCuklohdY

 

1. 문자열 관련

(1) 함수

코드 내용 결과
str = " Life is Good "
print(len(str)) 문자열 길이 구하기 14
print(str.find('i')) 특정 문자 찾기 2
print(str.upper()) 문자열 대문자로  LIFE IS GOOD
print(str.lower()) 문자열 소문자로  life is good
print(str.strip()) 양쪽 공백 없애기 Life is Good
print(str.replace("Good","Bad")) 특정 문자열 바꾸기  Life is Bad
print(str.split()) 문자열 나누기 ['Life', 'is', 'Good']

 

(2) 문자열 표현

코드 내용 결과
print('Life is\nGood') 줄바꾸기:  '\n' Life is
Good
print('"Life is Good"') 문자열에 큰따음표 포함하기 "Life is Good"
print("Life is %d Good" % 100)
print("Life is %s Good" % str(100))
print("Life is %s Good" % "100")
print("Life is %d Good" % int("100"))
print("Life is %10d Good" % 100)
print("Life is %10s Good" % str(100))

print("Life is %1s Good" % str(100))
문자열 포매팅 Life is 100 Good
Life is 100 Good
Life is 100 Good
Life is 100 Good
Life is        100 Good
Life is        100 Good
Life is 100 Good (주의)

 

print("Life is {0} Good".format(100)) Life is 100 Good
print("{0}, Life is {1} Good".format('WOW!!','Really'))
WOW!!, Life is Really Good
print("My {what} is {mean}".format(what="name",mean="alvin")) My name is alvin
f-string 포매팅 : 파이썬 버전 3.6부터 사용할 수 있는 기능. %포매팅과 str.format 방법보다 더 최근에 나온 것.

f-string의 모양은 f와 {}만 알면 됨. 문자열 맨 앞에 f를 붙여주고, {} 안에 직접 변수 이름이나 출력하고 싶은것을 넣으면 됨.

f'문자열 {변수} 문자열'
s = "coffee"
= 5
result1 = f"저는 {s}를 좋아함. 하루 {n}잔 마심."
print(result1)
저는 coffee를 좋아함. 하루 5잔 마심.

[주의] 작은따옴표(') 마찬가지 결과가 출력됨
test1 = 'left'
print(f'|{test1:<15}|')  
test2 = 'mid'
print(f'|{test2:^15}|')
test3 = 'right'
print(f'|{test3:>15}|')
|left            |
|      mid     |
|          right|

[주의] 왼쪽정렬, 가운데 정렬, 오른쪽 정렬
d = {'name': 'BlockDMask', 'gender': 'man', 'age': 100}
result = f'my name {d["name"]}, gender {d["gender"]}, age {d["age"]}'
print(result)
my name BlockDMask, gender man, age 100

[주의] 딕션너리 사용
count = 200
FindString = "T%4d" % (count-1)
FindString = FindString.replace(" ","0")
print(FindString)

FindString = f"T{count-1:>4}".replace(" ","0")
print(FindString)




T0199


T0199

 

(3) 문자열 인덱싱 / 슬라이싱

문자열 인덱싱
문자열 Y S J A N G
인덱싱 0 1 2 3 4 5
코드 내용 결과
str = "Life is very good"
문자열 L i f e   i s   v e r y   g o o d  
인덱싱 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16  
print(str[8:12]) 8부터 4(12-8)크기의 문자열 very
print(str[5:]) 5부터 끝까지 문자열 is very good
print(str[:8]) 0부터 8크기의 문자열 Life is
print(str[5:8]) 5부터 3(8-5)크기의 문자열 is

 

2. 리스트 관련

(1) 함수

코드 내용 결과
list = [1,2,3]

list.append(4)
print(list)

list.append([5,6])
print(list)

list.extend([7,8])
print(list)
append():
원자값을 덧붙이는 기능, 맨 마지막에 원자값을 추거하는 함수, 하나의 원자 값 뿐만아니라 자료형 관계 없는 모든 값들을 추가 가능

extend():
리스트간 더하기(합치기) 연산




[1, 2, 3, 4]


[1, 2, 3, 4, [5, 6]]


[1, 2, 3, 4, [5, 6], 7, 8]
a0 = [5,4,3,2,1]
b0 = ['d','c','b','a']

a0.sort()
print(a0)

b0.sort()
print(b0)
sort():
리스트 요소들을 순서대로 정렬, 숫자는 크기가 작은 순서대로, 문자는 알파벳 순서대로 정렬





[1, 2, 3, 4, 5]

['a', 'b', 'c', 'd']
a1 = [1,2,3,4,5]
b1 = ['a','b','c','d']

a1.reverse()
print(a1)

b1.reverse()
print(b1)
reverse():
리스트를 역순으로 뒤집어 줌





[5, 4, 3, 2, 1]

['d', 'c', 'b', 'a']
a2 = [1,2,3,4,5]
b2 = ['a','b','c','d']

print(a2.index(5))
print(b2.index('a'))
index():
index 인자로 원자값을 주면 해당 원자값의 인덱스 값을 반환



4
0
r1 = [1,3,5,3,7,3,9]
r2 = ['d','c','d','a']

r1.remove(3)
print(r1)

r2.remove('d')
print(r2)
remove():
리스트에서 첫번째로 나오는 입력값을 제거하는 함수




[1, 5, 3, 7, 3, 9]


['c', 'd', 'a']
a3 = [1,3,5,7,9]

print(a3.pop())
print(a3)
pop():
가장 마지막 요소를 돌려주는 함수, pop 함수를 통해 내보내진 원자값은 리스트에서 삭제



9
[1, 3, 5, 7]
a = [1,3,5,3,7,3,9]

print(a.count(3))
print(a.count(9))
count():
리스트에 포함된 원자값의 개수를 카운트


3
1

 

3. 제어문 관련

(1) if, if ~ else ~, if ~ elif ~ else

구분 형식 결과
if ~
else ~
conditon = 11
if conditon >= 10 :
    print("True")
else :
    print("False")
True
if ~
elif ~
else ~
conditon = 2
if conditon == 1 :
    print("1")
elif conditon == 2 :
    print("2")
else :
    print("3")
2

[Notice]
condition이 3이상이면 무조건 "3" 출력

 

(2) Dictionary 이용 (switch 형태 제작)

구분 형식 결과
Dictionary
이용한
Switch 함수
def switch(key):
    ltype = {"1":"A", "2":"B", "3":"O"}.get(key,"모르는")
    return f'당신은 {ltype} 타입이다.'

typeA = input() 
user = switch(typeA)
print(user)
입력: 1
출력: 당신은 A 타입이다. 

입력: 4
출력: 당신은 모르는 타입이다. 

 

 

4. 파일 및 폴더 관련

(1) 함수

코드 내용 결과
import os
print(os.sep)
os.sep
운영체제에 맞는 폴더 분리자 
window에서 출력 : \
Linux에서 출력 : /
import os
print(os.path.isdir("~/temp"))
print(os.path.isdir("./temp"))
os.path.isdir():
실제 폴더존재할 경우 True 리턴

False
True
import os
print(os.path.isfile("./no_test.txt"))
print(os.path.isfile("./test.txt"))
os.path.isfile():
실제 파일존재할 경우 True 리턴

False
True
f = open('t.txt','w')
f.write("hello world")
f.close()
open(): 파일열기, 옵션: w
write(): 파일에 쓰기
close(): 파일 닫기
<t.txt>
hello world
f = open('t.txt')
print(f.read())
f.close()
open(): 파일열기, 옵션: 없음
read(): 파일에서 읽기
close(): 파일 닫기
hello world
list1 = ["hello-1\n","hello-2"]

f = open('t.txt','w')
f.writelines(list1)
f.close()
open(): 파일열기, 옵션: w
writelines(): 파일에 리스트 내용 모두(모든 줄) 쓰기
<t.txt>
hello-1
hello-2
f = open('t.txt')
print(f.readline())
f.close()
open(): 파일열기, 옵션: 없음
readline(): 파일에서 한 줄 읽기
hello-1
f = open('t.txt')
print(f.readlines())
f.close()
open(): 파일열기, 옵션: 없음
readlines(): 파일에서 모든 줄을 리스트 형식으로 읽기
hello-1\n
hello-2
f = open('t.txt')
print(f.read(5))
f.close()
read(n): 파일에서 n 만큼의 문자 읽기 hello

 

5. 모듈 및 .py파일을 import 하는 방법 (유투브 강의)

(1) 사용 함수

test.py
01

02

03
04
05

06
07
08
import my_math as MM

scores = [88, 92, 79, 93, 85]

mean = MM.mean(scores)
curved = MM.add_five(scores)
mean_c = MM.mean(curved)

print("Scores:", scores)
print("New Scores(+5):", curved)
print("Original Mean:", mean, "  New Mean:", mean_c)

 

test.py 설명
01 모듈 및 .py파일을 본 프로그램에 포함시키기 위해서는 import 구문을 사용해야함. import 된 module의 object에 접근하기 위해서는 위(03,04,05 라인)와 같이 dot notation을 통해 접근해야 함.  그런데 import 뒤에 파일명이나 모듈명이 글이 길면 길어질때, 알다시피 as (alias)를 통해서 간략하게 줄임
03 MM.mean 호출은 "my_math.py의 mean 함수" : [01] def mean(num_list ◀scores):
04 MM.add_five 호출은 "my_math.py의 add_five 함수" : [03] def add_five(num_list ◀scores):
05 MM.mean 호출은 "my_math.py의 mean 함수" : [01] def mean(num_list ◀curved):

 

(2) 정의 함수

my_math.py
01
02

03
04
def mean(num_list):
    return sum(num_list) / len(num_list)

def add_five(num_list):
    return [n + 5 for n in num_list]
05
06
07
08
09

11
12
13

14
def main():
    print("Testing mean function")
    test_list = [1, 2, 3, 4]
    correct_mean = 2.5
    assert(mean(test_list) == correct_mean)

    print("Testing add_five function")
    correct_list = [6, 7, 8, 9]
    assert(add_five(test_list) == correct_list)

    print("All tests passed!")
15
16
if __name__ == '__main__':
    main()

 

my_math.py 설명
01 def mean(num_list):
다른 코드에서 사용하고 싶은 mean함수, 다른 코드에서 call 하면 실행되는 부분
03 def add_five(num_list):
다른 코드에서 사용하고 싶은 add_five함수, 다른 코드에서 call 하면 실행되는 부분
05 def main():
테스트용 코드 삽입, 다른 스크립에서 mean 함수 혹은 add_five 함수를 호출하여 사용하면, main block을 사용하지 않으면 테스크용 코드도 매번 호출되어 실행 됨
15
16
"__name__" built-in value: 파이썬 스크립트가 실행될 때 자동으로 __name__이라는 변수는 해당 모듈이 main인지 아닌지 판단하여 변수값을 __main__ 으로 바꿔어줌. 이로인해 my_math.py를 main으로 Test 해보는 코드를 돌릴 때는 if문 작동으로 main함수를 실행해 볼수 있는 것임

 

6. argparse : 명령행 옵션, 인자와 부속 명령을 위한 파서 [유투브 강의] [사이트]

test.py
01

02
03
04
05

06

07
08
09
import argparse

parser = argparse.ArgumentParser(description='Data Slicing Process')
parser.add_argument('--src', '-s', help="source fold(=str)", required=True)
parser.add_argument('--frame', '-f', help="frame(=int)", required=True)
parser.add_argument('--dst', '-s', help="target fold(=str)", required=True)

args = parser.parse_args()

print(args.src)
print(args.frame)
print(args.dst)

 

test.py 설명
01 argparse :명령어 인자를 처리 할 수 있는 파서 패키지를 import 함
02 ArgumentParser 객체를 생성
03 add_argument 함수를 사용해서 처리할 인자를 추가함 : "--src" 인자를 추가
04 add_argument 함수를 사용해서 처리할 인자를 추가함 : "--frame" 인자를 추가
05 add_argument 함수를 사용해서 처리할 인자를 추가함 : "--dst" 인자를 추가
06 parse.parse_args 함수를 사용해서 처리할 인자를 args 객체로 받아옴
07
08
09

args.src : --src 뒤에 붙은 인자값을 받아옴
args.frame : --frame 뒤에 붙은 인자값을 받아옴
args.dst : --dst 뒤에 붙은 인자값을 받아옴

[주의] 인자 카운트가 맞지 않으면 프로그램은 실행 되지 않고 사용법이 출력됨

 

7. queue, dequeue

from queue import Queue
que = Queue()
que.put('A')
print(que.qsize())
que.put('B')
print(que.qsize())
que.put('C')
print(que.qsize())
print(que.get())
print(que.get())
데이터를 추가 할 때 : put(x) 메서드를 사용
데이터 삭제 : get() 메서드 사용

1

2

3
A
B
from collections import deque
queue deque([1, 2, 3])
queue.append(4)
queue.appendleft(0)
print(queue) 
print(queue.popleft())
print(queue)
print(queue.pop())
print(queue)
deque는 Queue와 다르게 appendleft(x) 라는 메서드가 있는데, 이 메서드를 사용하면 데이터를 맨 앞에서 삽입할수 있음.


deque([0,1, 2, 3, 4])

0
deque([2, 3, 4])
4
deque([2, 3])

 

8. csv 파일 처리

[test.csv 화일 내용]
2021-08-05,18:01,AAA
2021-08-04,07:04,BBB
2021-08-04,07:02,CCC
2021-08-02,12:27,AAA
2021-08-02,12:27,BBB
2021-07-31,15:47,CCC
import csv
f = open('test.csv','r')
Rder = csv.reader(f)

for line in Rder:
    print(line)
 
f.close()
csv file 데이터 읽을 때 : csv,eder(f) 메서드를 사용

['2021-08-05', '18:01', 'AAA']
['2021-08-04', '07:04', 'BBB']
['2021-08-04', '07:02', 'CCC']
['2021-08-02', '12:27', 'AAA']
['2021-08-02', '12:27', 'BBB']
['2021-07-31', '15:47', 'CCC']
import csv
 f = open('test.csv','r')
Rder= csv.reader(f)
for line in Rder:
    if line[2] == 'AAA':
        print(f"{line[0]},{line[1]}")
f.close()



2021-08-05,18:01

2021-08-02,12:27
import csv
rf = open('test.csv','r')

Rder= csv.reader(rf)

wf = open('write.csv','w', newline='')
Wter = csv.writer(wf)

for line in Rder:
    if line[2] == 'AAA':
        line.reverse()
        Wter.writerow(line)
 
rf.close()
wf.close()


<write.csv>
AAA,18:01,2021-08-05
AAA,12:27,2021-08-02
import csv
f = open('test.csv','r')
rdr = csv.reader(f)
lines = []

for line in rdr:

    if line[2] == "BBB" or line[2] == "CCC":
        line[2] = "AAA"
    lines.append(line)
 
f = open('result.csv','w',newline='')
wr = csv.writer(f)
wr.writerows(lines)
 
f.close()
파일을 수정하는 개념이 됨

<result.csv>

2021-08-05,18:01,AAA
2021-08-04,07:04,AAA
2021-08-04,07:02,AAA
2021-08-02,12:27,AAA
2021-08-02,12:27,AAA
2021-07-31,15:47,AAA

 

 

 

 

 

 

 

 

[알아둘 상식 퀴즈]
매년 6월 6일은 현충일인데요. "충렬을 드러내는 날" 이라는 뜻으로 "현충"이라는 단어가 본격적으로 등장한 것은 조선의 19대 임금인 (   1   ) 때 라고 합니다.  (   1   ) (   2   )의 "업적과 호국 및 애민 정신을 기리자" 는 의미에서 사당하사하며 현충사라는 이름을 지었다고 합니다. 

 

정답은 댓글에 올려 놓습니다. 감사합니다.

 

[참고] 6월 6일이 현충일로 지정된 것은 망종(亡種)과 관련이 있습니다. 예로부터 망종벼와 같이 수염이 있는 곡식의 종자를 뿌리기에 적당한 때로 알려져 왔습니다. 농경 사회에서 보리를 수확하고 모내기를 시작하는 망종은 가장 좋은 날이기도 한데요. 국가를 지킨 영웅들에 대한 예를 갖추는 일은 예부터 망종에 진행되어왔습니다. 옛 기록을 보면, 고려 현종 때에는 조정에서 장병들의 뼈를 그들의 집으로 가져가서 제사 지내도록 했고, 조선시대 때는 6월 6일에 병사들의 유해를 매장했다고 합니다.
그리고, 현충일이 6월인 또 하나의 이유는 6월 25일에 발발한 6·25전쟁에서 가장 많은 장병들이 희생되었기 때문입니다. 또한, 현충일이 지정되었던 1956년의 ‘망종이 때마침 6월 6일이기도 했죠. 정부에서는 이를 고려해 매년 6월 6일을 현충기념일로 지정하게 되었습니다.

 

 

 

 

 

 

반응형