πŸ› οΈBackend/⚑Python

[Python] 12κ°• - 파일

junbin2 2025. 4. 23. 17:27

1. 파일의 이해

(1) 파일의 μ—­ν• 

 - 컴퓨터에 μ˜ν•΄ 처리될 λ˜λŠ” 처리된 데이터와 정보가 μž„μ‹œμ μœΌλ‘œ μ €μž₯된 μƒνƒœλ₯Ό 파일이라고 ν•œλ‹€.

 - 일련의 μ—°μ†λœ λ°”μ΄νŠΈλ‘œ λ³Ό 수 있고, ν”„λ‘œκ·Έλž¨(파이썬 μ†ŒμŠ€μ½”λ“œ)에 μ½ν˜€ 가곡 및 μ²˜λ¦¬κ°€ 파일의 역할이닀.

 

(2) 파일의 ꡬ성

 - νŒŒμΌμ€ μ—°μ†λœ λ°”μ΄νŠΈμ˜ ν˜•νƒœλ‘œ 기둝이 됨.

 - μ—°μ†λœ λ°”μ΄νŠΈμ™€ 파일의 μ‹œμž‘, 파일 포인터(ν˜„μž¬ μœ„μΉ˜), 파일의 끝(EoF)κ³Ό 같은 μš”μ†Œλ“€λ‘œ ꡬ성이 λ˜μ–΄μžˆμŒ

 

(3) 파일의 μ’…λ₯˜

 - 데이터가 μ €μž₯λ˜λŠ” 방식에 따라 ꡬ뢄이 λœλ‹€. ( λŒ€ν‘œμ  2κ°€μ§€ ν…μŠ€νŠΈ, λ°”μ΄λ„ˆλ¦¬ )

 - κ°€μž₯ 크게 ꡬ뢄 ν•  수 μžˆλŠ”κ±΄, λ©”λͺ¨μž₯으둜 ν•΄λ‹Ή 파일이 열리면 ν…μŠ€νŠΈ 파일 μ•ˆμ—΄λ¦¬λ©΄ λ°”μ΄λ„ˆλ¦¬ νŒŒμΌμ΄λ‹€.

[1] ν…μŠ€νŠΈ 파일

 - μ‚¬λžŒμ΄ 읽을 수 μžˆλŠ” 문자둜 κ΅¬μ„±μ΄λœ νŒŒμΌμ„ μ˜λ―Έν•œλ‹€.

 - μ½”λ“œ, μ„€μ • 파일, 둜그 등이 있음.

[2] λ°”μ΄λ„ˆλ¦¬ 파일

 - μ‚¬λžŒμ΄ 읽기 μ–΄λ €μš΄ 이진 λ°μ΄ν„°λ‘œ κ΅¬μ„±λœ νŒŒμΌμ΄λ‹€.

 - ν…μŠ€νŠΈλ‘œ ν•΄μ„λ˜μ§€ μ•Šκ³ , νŠΉμ • ν”„λ‘œκ·Έλž¨μ΄ 해석을 ν•΄μ„œ μ‚¬μš©μ„ ν•œλ‹€.

 - 이미지, μ˜€λ””μ˜€, μ‹€ν–‰ 파일 등이 있음. JPEG, MP3

 - μ‰½κ²Œλ§ν•΄, ν…μŠ€νŠΈ νŒŒμΌμ€ μ½”λ“œ 파일이 될 수 있고, 컴파일러λ₯Ό 톡해 컴파일이 되면 λ°”μ΄λ„ˆλ¦¬ μ½”λ“œκ°€ λ§Œλ“€μ–΄μ§.

 - μ „μš© μ‹€ν–‰κΈ° 즉, λŸ°νƒ€μž„μ„ μ œκ³΅ν•΄μ£ΌλŠ” ν”„λ‘œκ·Έλž¨μ΄ μ½μ–΄μ„œ κΈ°κ³„μ–΄λ‘œ λ³€ν™˜ν•˜λ©° ν”„λ‘œκ·Έλž¨μ΄ 싀행됨.

 - μ‰½κ²Œλ§ν•΄, μ΄λ―Έμ§€λŠ” 이미지 λ³΄μ—¬μ£ΌλŠ” ν”„λ‘œκ·Έλž¨, λ™μ˜μƒ νŽΈμ§‘κΈ°, λ“±λ“± μ΄λŸ¬ν•œ ν”„λ‘œκ·Έλž¨λ“€μ΄ λŸ°νƒ€μž„μž„.

 

(4) 파일 ν•¨μˆ˜

 - 거의 λͺ¨λ“  μ–Έμ–΄κ°€ νŒŒμΌμ„ λ‹€λ£° 수 μžˆλŠ” ν•¨μˆ˜λ₯Ό μ œκ³΅μ„ ν•΄μ£Όκ³  있음. νŒŒμ΄μ¬λ„ λ§ˆμ°¬κ°€μ§€μž„.

 - 파일의 μ‹œμž‘, 파일 포인터, 파일의 끝을 ν™œμš©ν•˜μ—¬ 데이터 읽기, μ“°κΈ°λ₯Ό μœ„ν•œ ν•¨μˆ˜ 및 λ©”μ†Œλ“œλ₯Ό λ‚΄μž₯

 - 라이프 사이클에 맞좰 파일 객체λ₯Ό 생성, μ‚¬μš©, μ‚­μ œλ₯Ό ν•  수 μžˆλ‹€.

# 파일 객체 생성
file_object = open("example.txt", "w")

 - 물리적인 파일과 μ—°κ²°λœ 파일 객체λ₯Ό μƒμ„±ν•˜κ³  μ°Έμ‘°λ³€μˆ˜μ— ν• λ‹Ή

 - 'r' : 읽기 μš©λ„

 - 'w' : μƒˆλ‘œμš΄ νŒŒμΌμ„ μ“°κΈ° μš©λ„

 - 'a' : 파일의 끝에 데이터λ₯Ό 덧뢙이기 μš©λ„

 

(5) 파일 이름

 - 파일 μ΄λ¦„μ—λŠ” ν•΄λ‹Ή νŒŒμΌμ— μ ‘κ·Όν•˜κΈ° μœ„ν•œ λͺ¨λ“  정보가 λ‹€ λ“€μ–΄μžˆμŒ.

 - ν•΄λ‹Ή 파일의 ν˜„μž¬ μœ„μΉ˜ 정보 λ˜ν•œ 파일 이름이 κ°€μ§€κ³  있음. ( /var/etc/python.py ν˜•νƒœ )

 - 파일 이름은 파일의 고유 μ‹λ³„μž μ—­ν•  및 μ €μž₯μž₯치 λ‚΄λΆ€μ—μ„œ 파일의 μœ„μΉ˜λ₯Ό ν‘œν˜„ν•˜λŠ” 파일경둜λ₯Ό 내포 ν•˜κ³  있음.

 

(6) 파일 읽기

 - νŠΉμ • λ²”μœ„μ˜ 데이터λ₯Ό νŒŒμΌμ—μ„œ 읽고 λ¬Έμžμ—΄λ‘œ λ°˜ν™˜ν•¨.

 - νŒŒμΌμ„ μ½λŠ” κ³Όμ •μ—μ„œ 파일 포인터도 같이 이동을 ν•˜λ©΄μ„œ 읽게 λœλ‹€.

file = open("경둜/파일λͺ….txt", "r")  # 1. νŒŒμΌμ„ '읽기' λͺ¨λ“œλ‘œ μ—Ά
content = file.read()              # 2. 파일 포인터가 처음(0번째)λΆ€ν„° λκΉŒμ§€ μ­‰ 읽음
file.close()                       # 3. 파일 λ‹«μŒ

 - open("파일", "r")을 ν•˜λ©΄ νŒŒμΌμ„ μ—΄μ§€λ§Œ, 아직 μ½μ§€λŠ” μ•ŠλŠ”λ‹€.

 - read()λ₯Ό ν˜ΈμΆœν•˜λ©΄, κ·Έ μˆœκ°„λΆ€ν„° 포인터가 파일의 μ²˜μŒλΆ€ν„° λκΉŒμ§€ μ΄λ™ν•˜λ©΄μ„œ μ½λŠ”λ‹€.

 - 이후 λ‹€μ‹œ read()λ₯Ό ν•˜λ©΄? 이미 포인터가 끝에 κ°€ μžˆμ–΄μ„œ 빈 λ¬Έμžμ—΄μ΄ λ‚˜μ˜¨λ‹€λŠ” 점!

 - close() ν•¨μˆ˜λ₯Ό 톡해 νŒŒμΌμ„ λ‹«μ•„μ€˜μ•Όν•œλ‹€.

[1] close() ν•¨μˆ˜ 호좜 이유

 - 파일 μžμ²΄λŠ” μ™ΈλΆ€ μžμ›μ΄κΈ° λ•Œλ¬Έμ— κ°€λΉ„μ§€ 컬렉터가 μ§€μ›Œμ€„ 수 μ—†μŒ.

 - μ΄μœ λŠ”, 같은 λ©”λͺ¨λ¦¬ 곡간이 μ•„λ‹ˆκΈ° λ•Œλ¬Έμž„. λ©”λͺ¨λ¦¬ 곡간에 λ‹€λ₯Έ κ³³μ—μ„œ 파일이 μ—΄λ € μžˆλŠ” μƒνƒœλ‘œ μœ μ§€κ°€ 됨.

 - 즉, close() ν•¨μˆ˜ ν˜ΈμΆœμ„ ν•˜μ§€ μ•Šκ²Œ 되면, κ²°κ΅­ 파일이 λ‹«νžˆμ§€ μ•ŠλŠ” μƒνƒœλ‘œ μœ μ§€κ°€ λ˜μ–΄μžˆκ²Œ 됨.

 - μš΄μ˜μ²΄μ œμ—λŠ” ν•œ λ²ˆμ— μ—΄ 수 μžˆλŠ” 파일 κ°œμˆ˜μ— μ œν•œμ΄ 있기 λ•Œλ¬Έμ— μŒ“μ΄λ©΄, μ—λŸ¬κ°€ 남.

 

(7) 파일 μ“°κΈ°

 - λ¬Έμžμ—΄μ„ 파일 포인터가 μœ„μΉ˜ν•œ 지점에 기둝

 - w λͺ¨λ“œλŠ” μ‹€μ œλ‘œ μ‘΄μž¬ν•˜λŠ” 파일이 μžˆμ–΄, ν•΄λ‹Ή 파일이 μ˜€ν”ˆ 될 μ‹œ 데이터가 μ‚­μ œλ¨.

 - 즉, μ‹€μ œ κ²½λ‘œμ— 이미 ν•΄λ‹Ή 파일이 μ‘΄μž¬ν•˜λŠ”μ§€ μ—¬λΆ€λ₯Ό ν™•μΈν•˜κ³  λ§Œλ“€μ–΄μ•Όν•¨.

file = open("경둜/파일λͺ….txt", "w")   # 1. νŒŒμΌμ„ 'μ“°κΈ°' λͺ¨λ“œλ‘œ μ—Ά (μ—†μœΌλ©΄ 생성, 있으면 λ‚΄μš© μ‚­μ œλ¨)
file.write("첫 번째 μ€„μž…λ‹ˆλ‹€.\n")     # 2. λ‚΄μš©μ„ νŒŒμΌμ— 씀
file.write("두 번째 쀄도 μΆ”κ°€ν•΄μš”.")   # 3. 계속 μž‘μ„± κ°€λŠ₯
file.close()                          # 4. νŒŒμΌμ„ λ‹«κ³ , λ²„νΌλœ λ‚΄μš© μ €μž₯됨

 - 첫번째 open에 w λͺ¨λ“œλ₯Ό μ΄μš©ν•˜λ©΄, μ“°κΈ° λͺ¨λ“œλ‘œ 곡백의 νŒŒμΌμ„ μƒμ„±ν•˜μ—¬ 제일 첫번쨰 μœ„μΉ˜μ— νŒŒμΌν¬μΈν„°κ°€ κ°€κ²Œλœλ‹€.

 - λ§ˆμ°¬κ°€μ§€λ‘œ close()λ₯Ό ν˜ΈμΆœν•΄μ„œ νŒŒμΌμ„ λ‹«μ•„μ€˜μ•Ό λ©”λͺ¨λ¦¬μ— 파일이 λ””μŠ€ν¬μ— μ €μž₯이 λœλ‹€.

 

(8) 데이터 μΆ”κ°€

 - 파일의 끝에 데이터λ₯Ό λ§λΆ™μ΄λŠ” μž‘μ—…

 - 파일 μ˜€ν”ˆ ν›„ 파일 포인터λ₯Ό EoF(End of File : 파일의 끝)둜 이동

 - μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” νŒŒμΌμ€ write와 λ™μΌν•˜κ²Œ μƒˆλ‘­κ²Œ λ§Œλ“€μ–΄μ„œ 곡백 첫번쨰 μœ„μΉ˜μ— νŒŒμΌν¬μΈν„°

file = open("경둜/파일λͺ….txt", "a")        # 1. νŒŒμΌμ„ '이어쓰기' λͺ¨λ“œλ‘œ μ—Ά (μ—†μœΌλ©΄ μƒˆλ‘œ 생성됨)
file.write("μ„Έ 번째 쀄이 μΆ”κ°€λ©λ‹ˆλ‹€.\n")  # 2. κΈ°μ‘΄ λ‚΄μš© 뒀에 λ§λΆ™μž„
file.close()                              # 3. λ‹«μœΌλ©΄μ„œ μ €μž₯ μ™„λ£Œ

 - ν•΄λ‹Ή νŒŒμΌμ— 데이터λ₯Ό μΆ”κ°€ν•  수 μžˆλ„λ‘ 도와쀀닀.