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

[1νŒ€/ν—ˆμ„œμ›] 10μ°¨μ‹œ 파이썬 μŠ€ν„°λ”” - μ˜ˆμ™Έμ²˜λ¦¬

ν—ˆμ„œμ› 2023. 6. 1. 23:14

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

μ˜ˆμ™Έμ²˜λ¦¬


ν•™μŠ΅λͺ©ν‘œ

  • μ˜ˆμ™Έμ˜ κ°œλ…κ³Ό 사둀에 λŒ€ν•΄ μ•Œμ•„λ³Έλ‹€.
  • 예츑 κ°€λŠ₯ν•œ μ˜ˆμ™Έμ™€ 예츑 λΆˆκ°€λŠ₯ν•œ μ˜ˆμ™Έμ— λŒ€ν•΄ μ΄ν•΄ν•œλ‹€.
  • 파일의 κ°œλ…κ³Ό μ’…λ₯˜μ— λŒ€ν•΄ ν•™μŠ΅ν•œλ‹€.
  • νŒŒμΌμ„ 읽고 μ“°λŠ” 방법을 μ‹€μŠ΅ν•˜κ³ , pickle λͺ¨λ“ˆμ— λŒ€ν•΄ μ•Œμ•„λ³Έλ‹€.

01 μ˜ˆμ™Έμ²˜λ¦¬

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

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

EX)

  • μ‚¬μš©μžμ˜ μž…λ ₯ 였λ₯˜ → ν”„λ‘œκ·Έλž˜λ¨Έμ˜ μ‹€μˆ˜λ‘œ 인코딩에 문제 λ°œμƒ
  • μžλ™ μ €μž₯autosave κΈ°λŠ₯ → μž‘μ—…ν•˜λ˜ 쀑 κ°‘μžκΈ° 컴퓨터가 μ’…λ£Œλ˜μ—ˆμ„ λ•Œλ₯Ό λŒ€λΉ„ν•˜μ—¬ μž‘μ—…ν•œ 것을 쀑간에 μžλ™μœΌλ‘œ μ €μž₯ν•΄μ£ΌλŠ” κΈ°λŠ₯
  • 예츑 κ°€λŠ₯ν•œ μ˜ˆμ™Έμ™€ 예츑 λΆˆκ°€λŠ₯ν•œ μ˜ˆμ™Έ
    • 예츑 κ°€λŠ₯ν•œ μ˜ˆμ™Έ

→ λ°œμƒ μ—¬λΆ€λ₯Ό κ°œλ°œμžκ°€ 사전에 인지할 수 μžˆλŠ” μ˜ˆμ™Έ

ex) ν…μŠ€νŠΈ λ°•μŠ€μ— μ‚¬μš©μžκ°€ μ‹€μˆ˜λ‘œ 잘λͺ»λœ 값을 μž…λ ₯ν•  것 κ°™λ‹€, μ‚¬μš©μžκ°€ μ‹€μ œλ‘œ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” νŒŒμΌμ— μ €μž₯ν•  것 κ°™λ‹€ λ“±… κ°œλ°œμžκ°€ 사전에 μ˜ˆμΈ‘ν•  수 μžˆλŠ” 것

⇒ κ°œλ°œμžλŠ” μ˜ˆμ™Έλ₯Ό μ˜ˆμΈ‘ν•˜μ—¬ λͺ…μ‹œμ μœΌλ‘œ μ˜ˆμ™Έκ°€ λ°œμƒν•  λ•ŒλŠ” μ–΄λ–»κ²Œ λŒ€μ‘ν•˜λΌκ³  λŒ€μ±… 마련 κ°€λŠ₯

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

ex) 맀우 λ§Žμ€ νŒŒμΌμ„ μ²˜λ¦¬ν•  λ•Œ

⇒ 인터프리터가 μžλ™μœΌλ‘œ μ˜ˆμ™ΈλΌκ³  μ‚¬μš©μžμ—κ²Œ μ•Œλ €μ€Œ

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

  • μ˜ˆμ™Έ 처리 ꡬ문
    • try-exceptλ¬Έ

μ˜ˆμ™Έ 처리의 κΈ°λ³Έ 문법

try:
	μ˜ˆμ™Έ λ°œμƒ κ°€λŠ₯ μ½”λ“œ
except μ˜ˆμ™Έ νƒ€μž…:
	μ˜ˆμ™Έ λ°œμƒ μ‹œ μ‹€ν–‰λ˜λŠ” μ½”λ“œ

λ§Œμ•½ μ—¬κΈ°μ„œ try문이 forλ¬Έ 밖에 있으면 μ–΄λ–€ 일이 λ°œμƒν• κΉŒ?

-> 반볡문 전체가 μ’…λ£Œ

tryλ¬Έ λ‚΄λΆ€μ—μ„œ μ˜ˆμ™Έ λ°œμƒ → exceptλ¬Έ μ˜μ—­μ— μžˆλŠ” μ½”λ“œ μ‹€ν–‰→ tryexceptλ¬Έ μ’…λ£Œ

 

  • try-except-elseλ¬Έ

if-elseλ¬Έκ³Ό λΉ„μŠ·ν•¨. ν•΄λ‹Ή μ˜ˆμ™Έκ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ” 경우 μˆ˜ν–‰ν•  μ½”λ“œλ₯Ό else문에 μž‘μ„±

try:
	μ˜ˆμ™Έ λ°œμƒ κ°€λŠ₯ μ½”λ“œ
except μ˜ˆμ™Έ νƒ€μž…:
	μ˜ˆμ™Έ λ°œμƒ μ‹œ μ‹€ν–‰λ˜λŠ” μ½”λ“œ
else:
	μ˜ˆμ™Έκ°€ λ°œμƒν•˜μ§€ μ•Šμ„ λ•Œ μ‹€ν–‰λ˜λŠ” μ½”λ“œ

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

but 많이 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” μ½”λ“œ

  • try-except-finallyλ¬Έ
try:
	μ˜ˆμ™Έ λ°œμƒ κ°€λŠ₯ μ½”λ“œ
except μ˜ˆμ™Έ νƒ€μž…:
	μ˜ˆμ™Έ λ°œμƒ μ‹œ μ‹€ν–‰λ˜λŠ” μ½”λ“œ
finally:
	μ˜ˆμ™Έ λ°œμƒ 여뢀와 상관없이 μ‹€ν–‰λ˜λŠ” μ½”λ“œ

finallyλ¬Έ : try-exceptλ¬Έ μ•ˆμ— μžˆλŠ” μˆ˜ν–‰ μ½”λ“œκ°€ μ•„λ¬΄λŸ° λ¬Έμ œμ—†μ΄ μ’…λ£Œλ˜μ—ˆμ„ 경우 μ΅œμ’…μœΌλ‘œ ν˜ΈμΆœν•˜λŠ” μ½”λ“œ (forλ¬Έμ—μ„œ μ‚¬μš©ν•˜λŠ” finallyλ¬Έκ³Ό μš©λ„κ°€ λΉ„μŠ·)

  • raiseλ¬Έ

ν•„μš”ν•  λ•Œ μ˜ˆμ™Έλ₯Ό λ°œμƒμ‹œν‚€λŠ” μ½”λ“œ

raise μ˜ˆμ™Έ νƒ€μž…οΌˆμ˜ˆμ™Έ 정보)
  • assertλ¬Έ

미리 μ•Œμ•„μ•Ό ν•  μ˜ˆμ™Έ 정보가 쑰건을 λ§Œμ‘±ν•˜μ§€ μ•Šμ„ 경우 μ˜ˆμ™Έλ₯Ό λ°œμƒμ‹œν‚΄

assert문은 True λ˜λŠ” False의 λ°˜ν™˜μ΄ κ°€λŠ₯ν•œ ν•¨μˆ˜λ₯Ό μ‚¬μš©→ Falseκ°€ λ°˜ν™˜λ˜λ©΄ μ˜ˆμ™Έκ°€ λ°œμƒν•œλ‹€.

assert μ˜ˆμ™Έ 쑰건

02 파일 닀루기

  • 파일의 κ°œλ…
  • 파일: 컴퓨터λ₯Ό μ‹€ν–‰ν•  λ•Œ κ°€μž₯ 기본이 λ˜λŠ” λ‹¨μœ„ → ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜λŠ” 것은 늘 νŒŒμΌμ„ μ‹€ν–‰ν•˜λŠ” 것이닀.
  • 파일의 μ’…λ₯˜κΈ°λ³Έμ μœΌλ‘œ λ°”μ΄λ„ˆλ¦¬ 파일과 ν…μŠ€νŠΈ 파일 두 κ°€μ§€λ‘œ λΆ„λ₯˜ν•  수 μžˆλ‹€.
    • λ°”μ΄λ„ˆλ¦¬ 파일(binary file)
    μ»΄ν“¨ν„°λ§Œ 이해할 수 μžˆλŠ” 이진 μ •λ³΄λ‘œ μ €μž₯된 파일ex) μ›Œλ“œ ν”„λ‘œκ·Έλž¨, μ—‘μ…€
  • → λΉ„νŠΈ ν˜•νƒœλ‘œ μ €μž₯λ˜μ–΄ λ©”λͺ¨μž₯으둜 μ—΄λ©΄ λ‚΄μš©μ΄ 보이지 μ•Šκ±°λ‚˜ λ‚΄μš©μ„ 확인할 수 μ—†λŠ” 파일
  • ν…μŠ€νŠΈ 파일(text file)

μ‚¬λžŒμ΄ 이해할 수 μžˆλŠ” λ¬Έμžμ—΄λ‘œ μ €μž₯된 파일

→ λ©”λͺ¨μž₯으둜 κ·Έ λ‚΄μš©μ„ 확인할 수 μžˆλ‹€.

ex) 파이썬 파일, μ›Œλ“œ ν”„λ‘œκ·Έλž¨

  • 파일 읽기

open( ) ν•¨μˆ˜ μ‚¬μš©

f =open("파일λͺ…", "파일 μ—΄κΈ° λͺ¨λ“œ")
f.close()

νŒŒμΌμ„ μ—¬λŠ” λͺ¨λ“œμ—λŠ” 읽기 λͺ¨λ“œ, μ“°κΈ° λͺ¨λ“œ, μΆ”κ°€ λͺ¨λ“œ 등이 μžˆλ‹€.

νŒŒμ΄μ¬μ—μ„œλŠ” 상황에 따라 μ΄λŸ¬ν•œ ν˜•μ‹μ„ μ‘°ν•©

  1. 파일 읽기
f = open ("dream .txt", "r")
contents = f.read()
print(contents)
f.close()

→ 1. open() ν•¨μˆ˜ λ‹€μŒμ— 파일λͺ…κ³Ό ‘r’을 μž…λ ₯ν•΄ νŒŒμΌμ— λŒ€ν•œ 정보λ₯Ό λ³€μˆ˜ f에 μ €μž₯ (파일 객체)

2. λ³€μˆ˜ fλ₯Ό μ΄μš©ν•΄ read() ν•¨μˆ˜ μ‹€ν–‰ : ν•΄λ‹Ή 파일의 ν…μŠ€νŠΈλ₯Ό contents λ³€μˆ˜μ— λ¬Έμžμ—΄λ‘œ μ €μž₯

3. contents λ³€μˆ˜μ˜ λ‚΄μš©, 즉 ‘dream.txt’ νŒŒμΌμ— μžˆλŠ” ν…μŠ€νŠΈλ₯Ό 화면에 좜λ ₯ν•œλ‹€.

4. close() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ νŒŒμΌμ„ μ’…λ£Œν•œλ‹€.

ν…μŠ€νŠΈ νŒŒμΌμ„ λ‹€λ£° λ•Œ 이미 μˆ˜μ •ν•˜κ³  μžˆλŠ” νŒŒμΌμ„ λ‹€λ₯Έ ν”„λ‘œκ·Έλž¨μ—μ„œ λ™μ‹œμ— ν˜ΈμΆœν•˜λ©΄ μ—λŸ¬ λ°œμƒ

ν•˜λ‚˜μ˜ 파이썬 ν”„λ‘œκ·Έλž¨μ΄ ν•˜λ‚˜μ˜ νŒŒμΌμ„ μ‚¬μš©ν•  λ•Œ μ‚¬μš©μ„ μ™„λ£Œν•˜λ©΄ λ°˜λ“œμ‹œ ν•΄λ‹Ή νŒŒμΌμ„ μ’…λ£Œν•΄μ•Ό ν•œλ‹€.

 

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

withλ¬Έκ³Ό ν•¨κ»˜ open() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.

with문은 λ“€μ—¬μ“°κΈ°λ₯Ό ν•˜λŠ” λ™μ•ˆμ—λŠ” open()ν•¨μˆ˜κ°€ μœ μ§€λ˜κ³ , λ“€μ—¬μ“°κΈ°κ°€ λλ‚˜λ©΄ open() ν•¨μˆ˜λ„ μ’…λ£Œ

차이점 : close() ν•¨μˆ˜λ₯Ό λͺ…μ‹œμ μœΌλ‘œ 쓰지 μ•Šμ•„λ„ 파일의 μ‚¬μš©μ„ μ’…λ£Œν•  수 μžˆλ‹€ 특히 ν•΄λ‹Ή 파일 κ°μ²΄λŠ” =둜 ν• λ‹Ήν•˜λŠ” 방식이 μ•„λ‹ˆλΌ as문을 μ‚¬μš©ν•˜μ—¬ λ³€μˆ˜λͺ…에 ν• λ‹Ή

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

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

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

ν•œ μ€„μ˜ 기쀀은 \n으둜 λ‚˜λ‰˜μ–΄μ§€κ³  리슀트둜 λ°˜ν™˜λ  λ•Œ forλ¬Έ λ“± λ‹€μ–‘ν•œ ν˜•νƒœλ‘œ ν™œμš©ν•  수 μžˆλ‹€.

with open("dream.txt","r") as my_file:
	content_list =my_file.readlines()   # 파일 전체λ₯Ό 리슀트둜 λ°˜ν™˜
	print(type(content_Ust))            # μžλ£Œν˜• 확인
	print(content_list)                 # λ¦¬μŠ€νŠΈκ°’ 좜λ ₯

4. μ‹€ν–‰ν•  λ•Œλ§ˆλ‹€ ν•œ 쀄씩 읽어 였기

readline()λŠ” μ‹€ν–‰ν•  λ•Œλ§ˆλ‹€ μ°¨λ‘€λŒ€λ‘œ ν•œ 쀄씩 μ½μ–΄μ˜¨λ‹€.

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

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

νŒŒμΌμ— μ €μž₯된 ν…μŠ€νŠΈμ˜ 톡계 정보λ₯Ό 읽어와야 ν•  λ•Œ → split() ν•¨μˆ˜μ™€ len() ν•¨μˆ˜λ₯Ό ν•¨κ»˜ μ‚¬μš©

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))
  • 파일 μ“°κΈ°

인코딩 : ν…μŠ€νŠΈ νŒŒμΌμ„ μ €μž₯ν•  λ•Œ μ‚¬μš©ν•˜λŠ” ν‘œμ€€μ„ 지정

인코딩 μ˜΅μ…˜μœΌλ‘œ 인코딩 ν‘œμ€€μ„ 지정할 수 μžˆλ‹€. 일반적으둜 인코딩은 utf-8을 많이 μ‚¬μš©ν•˜λ©°, νŒŒμΌμ„ μœˆλ„μš°μ—μ„œλ§Œ μ‚¬μš©ν•œλ‹€λ©΄ cp949도 μ‚¬μš©

인코딩은 μš΄μ˜μ²΄μ œλ‚˜ 파일의 μ‚¬μš© ν™˜κ²½μ— 따라 λ‹€λ₯΄κ²Œ μ„€μ •ν•΄μ•Ό ν•œλ‹€.

  • pickle λͺ¨λ“ˆ

μ˜μ†ν™”(persistence) : ν•„μš”ν•œ 객체λ₯Ό 파일둜 μ €μž₯μ‹œμΌœ λ‹€μ‹œ μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•˜λŠ” 것

νŒŒμ΄μ¬μ€ pickle λͺ¨λ“ˆμ„ μ œκ³΅ν•˜μ—¬ λ©”λͺ¨λ¦¬μ— λ‘œλ”©λœ 객체λ₯Ό μ˜μ†ν™”ν•  수 μžˆλ„λ‘ μ§€μ›ν•œλ‹€.

pickle λͺ¨λ“ˆμ„ μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œ ν˜ΈμΆœν•œ ν›„ 객체λ₯Ό μ €μž₯ν•  수 μžˆλŠ” νŒŒμΌμ„ μ—΄κ³  μ €μž₯ν•˜κ³ μž ν•˜λŠ” 객체 dump ν•œλ‹€. νŒŒμΌμ„ 생성할 λ•ŒλŠ” ‘w’κ°€ μ•„λ‹Œ ‘Wb’둜 μ—΄μ–΄μ•Ό 함! (μ—¬κΈ°μ„œ BλŠ” λ°”μ΄λ„ˆλ¦¬λ₯Ό λœ»ν•˜λŠ” μ•½μž) dump() ν•¨μˆ˜μ—μ„œλŠ” μ €μž₯ν•  객체, μ €μž₯될 파일 객체λ₯Ό μ°¨λ‘€λŒ€λ‘œ 인수둜 λ„£μœΌλ©΄ ν•΄λ‹Ή 객체가 ν•΄λ‹Ή νŒŒμΌμ— μ €μž₯λœλ‹€.