πŸ“š μŠ€ν„°λ””/파이썬 μŠ€ν„°λ”” κ°•μ˜μžλ£Œ

[1νŒ€/ν•œκ·œλ¦Ό] 10μ£Όμ°¨ 파이썬 μŠ€ν„°λ”” - μ˜ˆμ™Έμ²˜λ¦¬

onegyul 2023. 6. 1. 17:00

10μ°¨μ‹œ_κ°•μ˜μ•ˆ_μ˜ˆμ™Έμ²˜λ¦¬.pdf
0.32MB
10μ°¨μ‹œ_과제_μ˜ˆμ™Έμ²˜λ¦¬.pdf
0.12MB

10μ£Όμ°¨ κ°•μ˜ μ£Όμ œλŠ” μ˜ˆμ™Έμ²˜λ¦¬μ™€ 파일 닀루기 μž…λ‹ˆλ‹€.

1. μ˜ˆμ™Έ 처리

1) μ˜ˆμ™Έμ˜ κ°œλ…κ³Ό 사둀

μ˜ˆμ™Έ exception : ν”„λ‘œκ·Έλž¨μ„ κ°œλ°œν•˜λ©΄μ„œ μ˜ˆμƒν•˜μ§€ λͺ»ν•œ 상황이 λ°œμƒν•˜λŠ” 것

  • μž…λ ₯ 였λ₯˜ - μ›Ή μ‚¬μ΄νŠΈμ— κ°€μž…ν•˜μ—¬ 아이디λ₯Ό μƒμ„±ν•˜λ € ν•˜λŠ” 상황. 일반적으둜 μ•„μ΄λ””λŠ” μ˜λ¬Έμžλ‚˜ 숫자λ₯Ό μ§€μ›ν•˜λŠ”λ° λ•Œλ‘œλŠ” μ‚¬μš©μžκ°€ ν•œκΈ€λ‘œ 아이디λ₯Ό λ§Œλ“€κΈ° μœ„ν•΄ ν•œκΈ€ μž…λ ₯을 μ‹œλ„ν•  λ•Œκ°€ 있음. μ΄λŸ¬ν•œ 경우 μž…λ ₯된 ν•œκΈ€μ΄ κ·ΈλŒ€λ‘œ λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯되면 자칫 μ‚¬μš©μžκ°€ ν•΄λ‹Ή μ›Ή μ‚¬μ΄νŠΈμ— λ‘œκ·ΈμΈν•˜μ§€ λͺ»ν•  μˆ˜λ„ 있음. ν”„λ‘œκ·Έλž˜λ¨Έμ˜ μ‹€μˆ˜λ‘œ 인코딩에 λ¬Έμ œκ°€ λ°œμƒν•˜μ—¬ λ°μ΄ν„°λ² μ΄μŠ€μ— ν•œκΈ€μ΄ 잘λͺ» μ €μž₯될 μˆ˜λ„ μžˆλŠ” 상황. μ‚¬μš©μžκ°€ μ΄λŸ¬ν•œ μ‹€μˆ˜λ₯Ό ν•˜μ§€ μ•Šλ„λ‘ 해야함.
  • μžλ™ μ €μž₯ κΈ°λŠ₯(autosave) - 컴퓨터가 κ°‘μžκΈ° μ’…λ£Œλ˜μ—ˆμ„ λ•Œλ₯Ό λŒ€λΉ„ν•˜μ—¬ μž‘μ—…ν•œ 것을 쀑간에 μžλ™μœΌλ‘œ μ €μž₯ν•΄μ£ΌλŠ” κΈ°λŠ₯

μ΄λŸ¬ν•œ μ‚¬λ‘€μ²˜λŸΌ ν”„λ‘œκ·Έλž¨μ„ μ‹€μ œλ‘œ μž‘μ„±ν•˜κ³  μ‹€ν–‰ν•˜λ‹€ 보면 μ˜ˆμƒμΉ˜ λͺ»ν•œ 일듀이 많이 λ°œμƒν•˜λŠ”λ°, 이λ₯Ό μ˜ˆμ™ΈλΌκ³  ν•œλ‹€.

2) 예츑 κ°€λŠ₯ν•œ μ˜ˆμ™Έ & 예츑 λΆˆκ°€λŠ₯ν•œ μ˜ˆμ™Έ

  1. 예츑 κ°€λŠ₯ν•œ μ˜ˆμ™Έ
  • λ°œμƒ μ—¬λΆ€λ₯Ό κ°œλ°œμžκ°€ 사전에 인지할 수 μžˆλŠ” μ˜ˆμ™Έλ₯Ό 말함
  • 예) ν…μŠ€νŠΈ λ°•μŠ€μ— μ‚¬μš©μžκ°€ μ‹€μˆ˜λ‘œ 잘λͺ»λœ 값을 μž…λ ₯ν•  것 κ°™λ‹€, μ‚¬μš©μžκ°€ μ‹€μ œλ‘œ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” νŒŒμΌμ— μ €μž₯ν•  것 κ°™λ‹€ λ“±… μ–Όλ§ˆλ“ μ§€ μ˜ˆμ™Έ μ²˜λ¦¬κ°€ κ°€λŠ₯함.
  • ifλ¬Έ μ‚¬μš© λ“±μœΌλ‘œ λŒ€μ‘μ΄ λŒ€μ²΄λ‘œ 쉬움
  1. 예츑 λΆˆκ°€λŠ₯ν•œ μ˜ˆμ™Έ
  • 예) 맀우 λ§Žμ€ νŒŒμΌμ„ μ²˜λ¦¬ν•  λ•Œ
  • 인터프리터가 μžλ™μœΌλ‘œ μ˜ˆμ™ΈλΌκ³  μ‚¬μš©μžμ—κ²Œ μ•Œλ €μ€Œ

ν”„λ‘œκ·Έλž¨λ„ μΌμ’…μ˜ μ œν’ˆμ΄λ―€λ‘œ μ˜ˆμ™Έ μ²˜λ¦¬λŠ” μ€‘μš”ν•¨. μ œν’ˆμ˜ 완성도λ₯Ό λ†’μ΄λŠ” μ°¨μ›μ—μ„œ μ˜ˆμ™Έ μ²˜λ¦¬λŠ” 맀우 μ€‘μš”ν•œ κ°œλ…μž„.

3) μ˜ˆμ™Έ 처리 ꡬ문

  1. try-except문
  • try문에 μ˜ˆμ™Έ λ°œμƒμ΄ μ˜ˆμƒλ˜λŠ” μ½”λ“œ, except문에 μ˜ˆμ™Έ λ°œμƒ μ‹œ λŒ€μ‘ν•˜λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•œλ‹€.
for i in range(10):
    try:
        print(10 / i)
    except ZeroDivisionError:
        print("Not divided by 0")

# 좜λ ₯κ²°κ³Ό
Not divided by 0
10.0
5.0
3.3333333333333335
2.5
2.0
1.6666666666666667
1.4285714285714286
1.25
1.1111111111111112
  1. try-except-else문
  • if-elseλ¬Έκ³Ό λΉ„μŠ·ν•¨. ν•΄λ‹Ή μ˜ˆμ™Έκ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ” 경우 μˆ˜ν–‰ν•  μ½”λ“œλ₯Ό else문에 μž‘μ„±ν•˜λ©΄ 됨.

try문에 μ˜ˆμ™Έ λ°œμƒ κ°€λŠ₯ μ½”λ“œ, except μ˜ˆμ™Έ νƒ€μž… 뒀에 μ˜ˆμ™Έ λ°œμƒ μ‹œ μ‹€ν–‰λ˜λŠ” μ½”λ“œ, else문에 μ˜ˆμ™Έκ°€ λ°œμƒν•˜μ§€ μ•Šμ„ λ•Œ μ‹€ν–‰λ˜λŠ” μ½”λ“œλ₯Ό μž‘μ„±

for i in range(10):
    try:
        result = 10 / i
    except ZeroDivisionError:
        print("Not divided by 0")
    else:
        print(10 / i)

# 좜λ ₯κ²°κ³Ό
Not divided by 0
10.0
5.0
3.3333333333333335
2.5
2.0
1.6666666666666667
1.4285714285714286
1.25
1.1111111111111112

μ—λŸ¬κ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ” 경우의 μˆ˜ν–‰λ¬Έμ„ μ •μ˜ν•΄ λ†“μœΌλ©΄ μ—λŸ¬κ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ” κ²½μš°μ—λ„ 일어날 일을 μ‚¬μš©μžκ°€ μ •ν™•νžˆ μ˜ˆμΈ‘ν•  수 있음

  1. try-except-finally문
  • finallyλ¬Έ : try-exceptλ¬Έ μ•ˆμ— μžˆλŠ” μˆ˜ν–‰ μ½”λ“œκ°€ μ•„λ¬΄λŸ° λ¬Έμ œμ—†μ΄ μ’…λ£Œλ˜μ—ˆμ„ 경우 μ΅œμ’…μœΌλ‘œ ν˜ΈμΆœν•˜λŠ” μ½”λ“œ. forλ¬Έμ—μ„œ μ‚¬μš©ν•˜λŠ” finallyλ¬Έκ³Ό μš©λ„κ°€ λΉ„μŠ·ν•˜λ‹€κ³  μƒκ°ν•˜λ©΄ 됨
  • tryλ¬Έ 뒀에 μ˜ˆμ™Έ λ°œμƒ κ°€λŠ₯ μ½”λ“œ, except μ˜ˆμ™Έ νƒ€μž… λ’€ μ˜ˆμ™Έ λ°œμƒμ‹œ μ‹€ν–‰λ˜λŠ” μ½”λ“œ, finallyλ¬Έ 뒀에 μ˜ˆμ™Έ λ°œμƒ 여뢀와 상관없이 μ‹€ν–‰λ˜λŠ” μ½”λ“œλ₯Ό μž‘μ„±
try:
    for i in range(1, 10):
        result = 10 // i
        print(result)
except ZeroDivisionError:
    print("Not divided by 0")
finally:
    print("μ’…λ£Œλ˜μ—ˆλ‹€.")

# 좜λ ₯κ²°κ³Ό
10
5
3
2
2
1
1
1
1
μ’…λ£Œλ˜μ—ˆλ‹€.
  1. raise문
  • ν•„μš”ν•  λ•Œ μ˜ˆμ™Έλ₯Ό λ°œμƒμ‹œν‚€λŠ” μ½”λ“œ
  • raise μ˜ˆμ™Έ νƒ€μž…(μ˜ˆμ™Έ 정보)
while True:
    value = input("λ³€ν™˜ν•  μ •μˆ˜κ°’μ„ μž…λ ₯ν•΄ μ£Όμ„Έμš”: ")
    for digit in value:
        if digit not in "0123456789":
            raise ValueError("μˆ«μžκ°’μ„ μž…λ ₯ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.")
    print("μ •μˆ˜κ°’μœΌλ‘œ λ³€ν™˜λœ 숫자-", int(value))

# 좜λ ₯κ²°κ³Ό
λ³€ν™˜ν•  μ •μˆ˜κ°’μ„ μž…λ ₯ν•΄ μ£Όμ„Έμš”: 10
μ •μˆ˜κ°’μœΌλ‘œ λ³€ν™˜λœ 숫자- 10
λ³€ν™˜ν•  μ •μˆ˜κ°’μ„ μž…λ ₯ν•΄ μ£Όμ„Έμš”: ab
Traceback (most recent call last):
  File "C:\\Users\\hahnp\\PycharmProjects\\study_only\\dsob_week10\\raise.py", line 5, in <module>
    raise ValueError("μˆ«μžκ°’μ„ μž…λ ₯ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.")
ValueError: μˆ«μžκ°’μ„ μž…λ ₯ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

while True문으둜 반볡문이 계속 λŒμ•„κ°€λŠ” μƒνƒœμ—μ„œ μ‚¬μš©μžμ—κ²Œ μž…λ ₯을 λ°›λŠ” μ½”λ“œ. μ‚¬μš©μžκ°€ μž…λ ₯ν•œ 값이 μˆ«μžκ°€ μ•„λ‹Œ 경우 μˆ«μžκ°’μ„ μž…λ ₯ν•˜μ§€ μ•Šμ•˜λ‹€κ³  좜λ ₯ν•˜λ©° ν”„λ‘œκ·Έλž¨μ„ μ’…λ£Œν•¨.

  1. assert문
  • 미리 μ•Œμ•„μ•Ό ν•  μ˜ˆμ™Έ 정보가 쑰건을 λ§Œμ‘±ν•˜μ§€ μ•Šμ„ 경우 μ˜ˆμ™Έλ₯Ό λ°œμƒμ‹œν‚΄
  • assert μ˜ˆμ™Έ 쑰건
def get_binary_number(decimal_number):
    assert isinstance(decimal_number, int)
    return bin(decimal_number)
print(get_binary_number(10))
print(get_binary_number("10"))

# 좜λ ₯κ²°κ³Ό
0b1010
Traceback (most recent call last):
  File "C:\\Users\\hahnp\\PycharmProjects\\study_only\\dsob_week10\\assert.py", line 5, in <module>
    print(get_binary_number("10"))
  File "C:\\Users\\hahnp\\PycharmProjects\\study_only\\dsob_week10\\assert.py", line 2, in get_binary_number
    assert isinstance(decimal_number, int)
AssertionError

assert문은 μ½”λ“œλ₯Ό μž‘μ„±ν•  λ•Œ 잘λͺ»λœ μž…λ ₯ μ—¬λΆ€λ₯Ό 사전에 ν™•μΈν•˜μ—¬ λ‚˜μ€‘μ— ν•„μš”μ—†λŠ” 연산을 막아주고, κ²°κ΅­ λ‹€λ₯Έ μ‚¬λžŒμ΄ λ§Œλ“  μ½”λ“œλ₯Ό μ‚¬μš©ν•˜λŠ” 데 쒋은 κ°€μ΄λ“œκ°€ λœλ‹€.

2. 파일 닀루기

1) 파일의 κ°œλ…

νŒŒμΌμ€ 컴퓨터λ₯Ό μ‹€ν–‰ν•  λ•Œ κ°€μž₯ 기본이 λ˜λŠ” λ‹¨μœ„μ΄λ‹€. ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜λŠ” 것은 늘 νŒŒμΌμ„ μ‹€ν–‰ν•˜λŠ” 것이닀.

2) 파일의 μ’…λ₯˜

  1. λ°”μ΄λ„ˆλ¦¬ 파일(binary file)
  • μ»΄ν“¨ν„°λ§Œ 이해할 수 μžˆλŠ” 이진 μ •λ³΄λ‘œ μ €μž₯된 파일
  • λΉ„νŠΈ ν˜•νƒœλ‘œ μ €μž₯λ˜μ–΄ λ©”μ‘°μž₯으둜 μ—΄λ©΄ λ‚΄μš©μ΄ 보이지 μ•Šκ±°λ‚˜ λ‚΄μš© 확인이 λ˜μ§€ μ•ŠλŠ” 파일

   2. ν…μŠ€νŠΈ 파일(text file)

  • μ‚¬λžŒμ΄ 이해할 수 μžˆλŠ” λ¬Έμžμ—΄λ‘œ μ €μž₯된 파일둜, λ©”λͺ¨μž₯으둜 λ‚΄μš© 확인 κ°€λŠ₯함
  • ν…μŠ€νŠΈ νŒŒμΌλ„ 컴퓨터가 μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ λ°”μ΄λ„ˆλ¦¬ ν˜•νƒœλ‘œ μ €μž₯된 νŒŒμΌμž„.
  • ν…μŠ€νŠΈ νŒŒμΌμ€ 컴퓨터가 이해할 수 μžˆλŠ” ν˜•νƒœλ‘œ λ³€κ²½ν•˜μ—¬ μ €μž₯λ˜λŠ”λ°, λ³€κ²½ν•˜λŠ” 기쀀을 μ•„μŠ€ν‚€μ½”λ“œλ‚˜ μœ λ‹ˆμ½”λ“œλ‘œ ν•˜κ³  ν‘œμ€€μ— 따라 컴퓨터가 이애할 수 μžˆλ„λ‘ λ°”κΎΌλ‹€.

3) 파일 읽기

  • open( ) ν•¨μˆ˜ μ‚¬μš©
  • 파일 μ—¬λŠ” λͺ¨λ“œμ—λŠ” 읽기 λͺ¨λ“œ, μ“°κΈ° λͺ¨λ“œ, μΆ”κ°€ λͺ¨λ“œ 등이 있음
  • r : 읽기 λͺ¨λ“œ (νŒŒμΌμ„ 읽기만 ν•  λ•Œ μ‚¬μš©)
  • w : μ“°κΈ° λͺ¨λ“œ (νŒŒμΌμ— λ‚΄μš©μ„ μ“Έ λ•Œ μ‚¬μš©)
  • a : μΆ”κ°€ λͺ¨λ“œ (파일의 λ§ˆμ§€λ§‰μ— μƒˆλ‘œμš΄ λ‚΄μš©μ„ μΆ”κ°€ν•  λ•Œ μ‚¬μš©)

1. 파일 읽기

f = open("dream.txt", "r")
contents = f.read()
print(contents)
f.close()

# 좜λ ₯κ²°κ³Ό
I have a dream a song to sing
to help me cope with anything
if you see the wonder of a fairy tale
you can take the future even
if you fail I believe in angels
something good in everything

open( ) ν•¨μˆ˜μ™€ read( ) ν•¨μˆ˜λ₯Ό 톡해 ν…μŠ€νŠΈλ₯Ό 좜λ ₯함

2. withλ¬Έκ³Ό ν•¨κ»˜ μ‚¬μš©ν•˜κΈ°

with open("dream.txt", "r") as my_file:
    contents = my_file.read()
    print(type(contents), contents)

# 좜λ ₯κ²°κ³Ό
<class 'str'> I have a dream a song to sing
to help me cope with anything
if you see the wonder of a fairy tale
you can take the future even
if you fail I believe in angels
something good in everything

close( ) ν•¨μˆ˜λ₯Ό λͺ…μ‹œμ μœΌλ‘œ 쓰지 μ•Šμ•„λ„ 파일의 μ‚¬μš©μ„ μ’…λ£Œν•  수 있음

3. ν•œ 쀄씩 읽어 λ¦¬μŠ€νŠΈν˜•μœΌλ‘œ λ°˜ν™˜ν•˜κΈ°

with open("dream.txt", "r") as my_file:
    content_list = my_file.readlines()
    print(type(content_list))
    print(content_list)

# 좜λ ₯κ²°κ³Ό
<class 'list'>
['I have a dream a song to sing\\n', 'to help me cope with anything\\n', 'if you see the wonder of a fairy tale\\n', 'you can take the future even\\n', 'if you fail I believe in angels\\n', 'something good in everything']

readlines( ) ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ ν•œ 쀄씩 λ‚΄μš©μ„ 읽어와 λ¬Έμžμ—΄ ν˜•νƒœλ‘œ μ €μž₯함.

4. μ‹€ν–‰ν•  λ•Œλ§ˆλ‹€ ν•œ 쀄씩 μ½μ–΄μ˜€κΈ°

with open("dream.txt", "r") as my_file:
    i = 0
    while 1:
        line = my_file.readline()
        if not line:
            break
        print(str(i)+"==="+ line.replace("\\n",""))  # ν•œ 쀄씩 κ°’ 좜
        i = i + 1

# 좜λ ₯κ²°κ³Ό
0===I have a dream a song to sing
1===to help me cope with anything
2===if you see the wonder of a fairy tale
3===you can take the future even
4===if you fail I believe in angels
5===something good in everything

5. νŒŒμΌμ— μ €μž₯된 κΈ€μžμ˜ 톡계 정보 좜λ ₯ν•˜κΈ°

with open("dream.txt", "r") as my_file:
    contents = my_file.read()
    word_list = contents.split(" ")
    line_list = contents.split("\\n")

print("총 κΈ€μžμ˜ 수:", len(contents))
print("총 λ‹¨μ–΄μ˜ 수:", len(word_list))
print("총 μ€„μ˜ 수:", len(line_list))

# 좜λ ₯κ²°κ³Ό
총 κΈ€μžμ˜ 수: 187
총 λ‹¨μ–΄μ˜ 수: 35
총 μ€„μ˜ 수: 6

split( ) ν•¨μˆ˜μ™€ len( ) ν•¨μˆ˜λ₯Ό ν•¨κ»˜ μ‚¬μš©

4) 파일 μ“°κΈ°

인코딩 : ν…μŠ€νŠΈ νŒŒμΌμ„ μ €μž₯ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ €μž₯ μ‹œ μ‚¬μš©ν•˜λŠ” ν‘œμ€€μ„ 지정해야 ν•˜λŠ”λ°, 이λ₯Ό 인코딩이라고 함.

인코딩 μ˜΅μ…˜μœΌλ‘œ 인코딩 ν‘œμ€€μ„ 지정할 수 있으며 일반적으둜 utf8을 많이 μ‚¬μš©

5) pickle λͺ¨λ“ˆ

  • μ˜μ†ν™” : 파이썬 ν”„λ‘œκ·Έλ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•  λ•Œ μƒμ„±λ˜λŠ” μ—¬λŸ¬ λ³€μˆ˜μ™€ κ°μ²΄λŠ” μˆœκ°„μ μœΌλ‘œ λ©”λͺ¨λ¦¬μ— λ‘œλ”©λ˜μ—ˆλ‹€κ°€ ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œλ˜λ©΄ 사라진닀. ν•˜μ§€λ§Œ λ•Œλ‘œλŠ” μ΄λ ‡κ²Œ μ‚¬μš©λ˜λŠ” 객체λ₯Ό μ €μž₯μ‹œμΌœ 놓고 ν•„μš” μ‹œ λ‹€μ‹œ λΆˆλŸ¬μ•Ό ν•˜λŠ” κ²½μš°κ°€ μžˆλŠ”λ° 이 경우λ₯Ό μ˜μ†ν™”λΌκ³  함.
  • pickle λͺ¨λ“ˆ μ‚¬μš©μ„ μœ„ν•΄ 호좜 ν›„ 객체λ₯Ό μ €μž₯ν•  수 μžˆλŠ” νŒŒμΌμ„ μ—΄κ³  μ €μž₯ν•˜κ³ μž ν•˜λŠ” 객체λ₯Ό dumpν•˜λ©΄ 됨.
  • dump( ) ν•¨μˆ˜μ—μ„œλŠ” μ €μž₯ν•  객체, μ €μž₯될 파일 객체λ₯Ό μ°¨λ‘€λŒ€λ‘œ 인수둜 λ„£μœΌλ©΄ ν•΄λ‹Ή 객체가 ν•΄λ‹Ή νŒŒμΌμ— μ €μž₯됨