Search

파일 μž…μΆœλ ₯

파일 μž…μΆœλ ₯

νŒŒμ΄μ¬μ„ 톡해, μ‹œμŠ€ν…œμ˜ νŒŒμΌμ„ μž…λ ₯ν•˜κ³  좜λ ₯ν•˜λŠ” 방법을 μ•Œμ•„λ΄…λ‹ˆλ‹€.
β€’
파일 μž…μΆœλ ₯ κ΄€λ ¨ λͺ¨λ“ˆ
β€’
파일 μž…μΆœλ ₯ ν•¨μˆ˜
β€’
open() ν•¨μˆ˜
β€’
ν…μŠ€νŠΈ 파일
β—¦
ν…μŠ€νŠΈ 파일 생성
β—¦
ν…μŠ€νŠΈ 파일 μΆ”κ°€ μž‘μ„±
β—¦
ν…μŠ€νŠΈ 파일 읽기
β€’
파일 μ‚­μ œ
β€’
파일 볡사
β€’
CSV 파일
β—¦
CSV 파일 생성
β—¦
CSV 파일 읽기

파일 μž…μΆœλ ₯ κ΄€λ ¨ λͺ¨λ“ˆ

λͺ¨λ“ˆ
μ„€λͺ…
open()
νŒŒμΌμ„ μ—΄ λ•Œ μ‚¬μš©λ˜λŠ” ν•¨μˆ˜. νŒŒμΌμ„ μ—΄κ±°λ‚˜ μƒμ„±ν•˜κ³  파일 객체λ₯Ό λ°˜ν™˜
os
파일 및 디렉터리와 κ΄€λ ¨λœ λ‹€μ–‘ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” ν•¨μˆ˜λ“€μ΄ μžˆλŠ” λͺ¨λ“ˆ
shutil
파일 및 디렉터리 관리에 μ‚¬μš©λ˜λŠ” κ³ μˆ˜μ€€μ˜ 파일 μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” ν•¨μˆ˜λ“€μ΄ μžˆλŠ” λͺ¨λ“ˆ
pathlib
파일 경둜λ₯Ό λ‹€λ£¨λŠ” 데 μ‚¬μš©λ˜λŠ” 객체 지ν–₯적인 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•˜λŠ” λͺ¨λ“ˆ

파일 μž…μΆœλ ₯ ν•¨μˆ˜

ν•¨μˆ˜
μ„€λͺ…
open()
νŒŒμΌμ„ μ—΄ λ•Œ μ‚¬μš©λ˜λŠ” ν•¨μˆ˜λ‘œ, 파일 κ²½λ‘œμ™€ μ˜΅μ…˜μ„ 인자둜 λ°›μŠ΅λ‹ˆλ‹€.
read()
νŒŒμΌμ—μ„œ 데이터λ₯Ό μ½μ–΄μ˜΅λ‹ˆλ‹€.
write()
νŒŒμΌμ— 데이터λ₯Ό μ”λ‹ˆλ‹€.
close()
νŒŒμΌμ„ λ‹«μŠ΅λ‹ˆλ‹€.
readline()
νŒŒμΌμ—μ„œ ν•œ 쀄씩 데이터λ₯Ό μ½μ–΄μ˜΅λ‹ˆλ‹€.
readlines()
νŒŒμΌμ—μ„œ λͺ¨λ“  쀄을 읽어와 리슀트둜 λ°˜ν™˜ν•©λ‹ˆλ‹€.

open() ν•¨μˆ˜

파일 μ—΄κΈ° ν•¨μˆ˜

open ν•¨μˆ˜ μ‚¬μš©ν•˜κΈ°

open(파일λͺ…, λͺ¨λ“œ, μ˜΅μ…˜)
β€’
파일λͺ… : 파일의 경둜λ₯Ό 지정
β€’
λ°˜ν™˜κ°’ : file 객체
β€’
λͺ¨λ“œ : 읽기, μ“°κΈ°, μΆ”κ°€ λͺ¨λ“œ 및 ν…μŠ€νŠΈ, λ°”μ΄λ„ˆλ¦¬ λͺ¨λ“œ 지정
β€’
μ˜΅μ…˜ : encoding, newline, buffering, errors

λͺ¨λ“œ

λͺ¨λ“œ
μ„€λͺ…
r
읽기 λͺ¨λ“œ
w
μ“°κΈ° λͺ¨λ“œ
a
μΆ”κ°€ λͺ¨λ“œ
t
ν…μŠ€νŠΈ λͺ¨λ“œ
b
λ°”μ΄λ„ˆλ¦¬ λͺ¨λ“œ (2진 λͺ¨λ“œ)
λͺ¨λ“œ
μ„€λͺ…
rt
ν…μŠ€νŠΈ 읽기 λͺ¨λ“œ
wt
ν…μŠ€νŠΈ μ“°κΈ° λͺ¨λ“œ
at
ν…μŠ€νŠΈ μΆ”κ°€ λͺ¨λ“œ
rb
λ°”μ΄λ„ˆλ¦¬ 읽기 λͺ¨λ“œ
wb
λ°”μ΄λ„ˆλ¦¬ μ“°κΈ° λͺ¨λ“œ
ab
λ°”μ΄λ„ˆλ¦¬ μΆ”κ°€ λͺ¨λ“œ

μ˜΅μ…˜

속성
μ„€λͺ…
encoding
νŒŒμΌμ„ μΈμ½”λ”©ν•˜λŠ” ν˜•μ‹μ„ μ§€μ •ν•˜λŠ” 속성
newline
νŒŒμΌμ—μ„œ μ‚¬μš©ν•˜λŠ” 쀄 λ°”κΏˆ 문자λ₯Ό μ§€μ •ν•˜λŠ” 속성
buffering
버퍼 μ‚¬μš© 섀정을 ν•˜λŠ” 속성 (λ°”μ΄νŠΈ λ‹¨μœ„)
errors
인코딩 및 λ””μ½”λ”© κ³Όμ •μ—μ„œ λ°œμƒν•˜λŠ” μ—λŸ¬ 처리 방법을 μ§€μ •ν•˜λŠ” 속성

ν…μŠ€νŠΈ 파일

ν…μŠ€νŠΈ νŒŒμΌμ„ μƒμ„±ν•˜κ³ , κΈ°μ‘΄ λ‚΄μš©μ— ν…μŠ€νŠΈλ₯Ό μΆ”κ°€ν•˜κ³  μ½μ–΄μ˜€λŠ” 과정을 μ•Œμ•„λ΄…λ‹ˆλ‹€.

ν…μŠ€νŠΈ 파일 생성

ν…μŠ€νŠΈ μ“°κΈ° λͺ¨λ“œ(wt)둜 open()λ₯Ό ν˜ΈμΆœν•˜μ—¬ file 객체λ₯Ό 톡해 write() ν•¨μˆ˜λ‘œ ν…μŠ€νŠΈ λ‚΄μš©μ„ μž‘μ„±ν•˜μ—¬ ν…μŠ€νŠΈ νŒŒμΌμ„ μƒμ„±ν•©λ‹ˆλ‹€.
path = 'C:/python/file/' file = open(path + 'hello.txt', 'wt', encoding='UTF-8') # 파일 λ‚΄μ—μ„œ 좜λ ₯ : write() file.write('μ•ˆλ…•ν•˜μ„Έμš”') file.write('\n') file.write('파일 μž…μΆœλ ₯ λ‚΄μš©μ„ ν•™μŠ΅ν•©λ‹ˆλ‹€') print('파일이 μƒμ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€.') # 파일 λ‹«κΈ° file.close()
Python
볡사

ν…μŠ€νŠΈ 파일 μΆ”κ°€ μž‘μ„±

ν…μŠ€νŠΈ μΆ”κ°€ λͺ¨λ“œ(at)둜 open()λ₯Ό ν˜ΈμΆœν•˜μ—¬ file 객체λ₯Ό 톡해 write() ν•¨μˆ˜λ‘œ ν…μŠ€νŠΈ λ‚΄μš©μ„ μž‘μ„±ν•˜μ—¬ ν…μŠ€νŠΈ νŒŒμΌμ„ μƒμ„±ν•©λ‹ˆλ‹€.
path = 'C:/python/file/' # at : μΆ”κ°€λͺ¨λ“œ + ν…μŠ€νŠΈλͺ¨λ“œ file = open(path + 'hello.txt', 'at', encoding='UTF-8') # μΆ”κ°€ν•  λ‚΄μš© file.write('\n') file.write('μ΄μ–΄μ„œ λ‚΄μš©μ„ μΆ”κ°€ν•©λ‹ˆλ‹€') file.write('\n') file.write('ν…μŠ€νŠΈ 파일 λ‚΄μš© μΆ”κ°€ λͺ¨λ“œ : at') print('νŒŒμΌμ— μƒˆλ‘œμš΄ λ‚΄μš©μ„ μΆ”κ°€ν•˜μ˜€μŠ΅λ‹ˆλ‹€.') # 파일 λ‹«κΈ° file.close()
Python
볡사

ν…μŠ€νŠΈ 파일 읽기

ν…μŠ€νŠΈ 읽기 λͺ¨λ“œ(rt)둜 open()λ₯Ό ν˜ΈμΆœν•˜μ—¬ file 객체λ₯Ό 톡해 read() ν•¨μˆ˜λ‘œ ν…μŠ€νŠΈ λ‚΄μš©μ„ μž‘μ„±ν•˜μ—¬ ν…μŠ€νŠΈ λ‚΄μš©μ„ μ½μ–΄μ˜΅λ‹ˆλ‹€.
path = 'C:/python/file/' # rt : 읽기λͺ¨λ“œ + ν…μŠ€νŠΈλͺ¨λ“œ # 읽기λͺ¨λ“œ : r (read) # νŒŒμΌμœ ν˜• : t (text) file = open(path + 'hello.txt', 'rt', encoding='UTF-8') while True: # str = file.read(10) # νŒŒμΌλ‘œλΆ€ν„° 10κΈ€μžμ”© μ½μ–΄μ˜¨λ‹€. str = file.readline() # νŒŒμΌλ‘œλΆ€ν„° ν•œ 쀄 μ”© μ½μ–΄μ˜¨λ‹€. if not str: break print(str, end='') # 파일 λ‹«κΈ° - λ©”λͺ¨λ¦¬ ν•΄μ œ file.close()
Python
볡사

파일 μ‚­μ œ

os λͺ¨λ“ˆμ„ 톡해 파일 쑴재 μ—¬λΆ€λ₯Ό ν™•μΈν•˜κ³  νŒŒμΌμ„ μ‚­μ œν•  수 μžˆλ‹€.
import os path = 'C:/python/file/' file = input('μ‚­μ œν•  파일λͺ… : ') file = path + file # 파일 쑴재 확인 if os.path.exists(file): # 파일 μ‚­μ œ os.remove(file) print('파일이 μ‚­μ œλ˜μ—ˆμŠ΅λ‹ˆλ‹€.')
Python
볡사

파일 볡사

원본 νŒŒμΌμ„ 읽기 λͺ¨λ“œ μž…λ ₯ λ°›κ³ , μƒˆ 파일 경둜둜 μ“°κΈ° λͺ¨λ“œλ‘œ 좜λ ₯ν•˜λŠ” 것
원본 파일 --> λ³€μˆ˜ --> 볡사본 (읽기) (μ“°κΈ°)
Plain Text
볡사

파일 볡사 κ³Όμ •

1.
원본 파일 μ—΄κΈ° open()
2.
1024Bytes(1KB) μ”© 읽기 read()
3.
μƒˆ 파일 μ—΄κΈ° open()
4.
1024Bytes(1KB) μ”© 좜λ ₯ write()
5.
μž…λ ₯, 좜λ ₯ μ’…λ£Œ close()
버퍼(buffer)? : μž„μ‹œ μ €μž₯ 곡간

with

파일 μž…μΆœλ ₯ μ‹œ, μžλ™μœΌλ‘œ close() ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•œλ‹€.
with open(파일경둜, λͺ¨λ“œ) as 파일 객체: 처리 μ½”λ“œ 처리 μ½”λ“œ 처리 μ½”λ“œ
Python
볡사
path = 'C:/python/file/' file = path + 'hello.txt' copy = path + 'hello(볡사).txt' buffer_size = 1024 # 버퍼 μš©λŸ‰ : 1024Byte(1KB) # source : 원본 파일 객체 # copyfile : 볡사 파일 객체 with open(file, 'rb') as source: with open(copy, 'wb') as copyfile: while True: # 원본 νŒŒμΌμ„ λ²„νΌμš©λŸ‰λ§Œ μ½μ–΄μ™€μ„œ buffer 에 μ €μž₯ # buffer μ—λŠ” 1KB 만큼의 파일 데이터가 μ €μž₯ buffer = source.read(buffer_size) if not buffer: break # 1KB μ”© 파일 생성 copyfile.write(buffer) print(copy) print('파일이 λ³΅μ‚¬λ˜μ—ˆμŠ΅λ‹ˆλ‹€.')
Python
볡사

CSV(Comma-Separated Values) 파일

데이터λ₯Ό μ‰Όν‘œ(,)둜 κ΅¬λΆ„ν•˜μ—¬ μ €μž₯ν•˜λŠ” ν…μŠ€νŠΈ 파일 ν˜•μ‹
νŒŒμ΄μ¬μ—μ„œλŠ” csv λͺ¨λ“ˆμ„ μ‚¬μš©ν•˜λ©΄, csv νŒŒμΌμ„ μ‰½κ²Œ μ‚¬μš©ν•  수 μžˆλ‹€.

CSV λͺ¨λ“ˆ μ£Όμš” ν•¨μˆ˜

ν•¨μˆ˜
μ„€λͺ…
csv.reader()
CSV νŒŒμΌμ„ 읽고, 각 행을 νŒŒμ‹±ν•˜μ—¬ 리슀트둜 λ°˜ν™˜ν•˜λŠ” 리더 객체λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
csv.writer()
CSV νŒŒμΌμ„ μ“°κ³ , 각 행을 CSV ν˜•μ‹μœΌλ‘œ μž‘μ„±ν•˜λŠ” 라이터 객체λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
csv.DictReader()
CSV νŒŒμΌμ„ 읽고, 각 행을 λ”•μ…”λ„ˆλ¦¬λ‘œ λ°˜ν™˜ν•˜λŠ” 리더 객체λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
csv.DictWriter()
CSV νŒŒμΌμ„ μ“°κ³ , 각 행을 λ”•μ…”λ„ˆλ¦¬ ν˜•μ‹μœΌλ‘œ μž‘μ„±ν•˜λŠ” 라이터 객체λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.

CSV 파일 생성

CSV νŒŒμΌμ„ μƒμ„±ν•˜κΈ° μœ„ν•΄μ„œ writer 객체λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
ν•¨μˆ˜
μ„€λͺ…
writer.writerow(row)
주어진 λ¦¬μŠ€νŠΈλ‚˜ νŠœν”Œ rowλ₯Ό CSV ν˜•μ‹μœΌλ‘œ νŒŒμΌμ— μ”λ‹ˆλ‹€.
writer.writerows(rows)
주어진 리슀트 rows의 λͺ¨λ“  행을 CSV ν˜•μ‹μœΌλ‘œ νŒŒμΌμ— μ”λ‹ˆλ‹€.
''' CSV (Comma Separated Value) : 콀마(,) λΆ„λ¦¬ν•œ κ°’λ“€ ex) ν•™λ²ˆ,이름,μ£Όμ†Œ,μ „ν™”λ²ˆν˜Έ 101,김쑰은,μ„œμšΈμ‹œ μ˜λ“±ν¬κ΅¬,010-1111-2222 102,김쑰은,μ„œμšΈμ‹œ μ˜λ“±ν¬κ΅¬,010-1111-2222 103,김쑰은,μ„œμšΈμ‹œ μ˜λ“±ν¬κ΅¬,010-1111-2222 104,김쑰은,μ„œμšΈμ‹œ μ˜λ“±ν¬κ΅¬,010-1111-2222 ''' import csv path = 'C:/ALOHA/PYTHON' file = path + 'test.csv' # open(파일경둜, λͺ¨λ“œ, μ˜΅μ…˜) with open(file, 'w', newline='', encoding='UTF-8') as file: # delimiter : κ΅¬λΆ„κΈ°ν˜Έ # writer(파일객체, delimiter="κ΅¬λΆ„κΈ°ν˜Έ") # : νŒŒμΌμ„ μž‘μ„±ν•˜λŠ” κΈ°λŠ₯을 가진 writer 객체λ₯Ό λ°˜ν™˜ csv_maker = csv.writer(file, delimiter=',') # writer 객체가 가진 κΈ°λŠ₯ : writerow() # : νŒŒμΌκ°μ²΄μ— ν•œ 쀄씩 데이터λ₯Ό μž‘μ„±ν•˜λŠ” ν•¨μˆ˜ csv_maker.writerow(['ν•™λ²ˆ', '이름', 'μ£Όμ†Œ', 'μ „ν™”λ²ˆν˜Έ']) csv_maker.writerow(['101', 'ALOHA', 'μΈμ²œμ‹œ 뢀평ꡬ', '010-1111-2222']) csv_maker.writerow(['102', 'ALOHA', 'μΈμ²œμ‹œ 뢀평ꡬ', '010-1111-2222']) csv_maker.writerow(['103', 'ALOHA', 'μΈμ²œμ‹œ 뢀평ꡬ', '010-1111-2222']) csv_maker.writerow(['104', 'ALOHA', 'μΈμ²œμ‹œ 뢀평ꡬ', '010-1111-2222']) print('파일이 μƒμ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€')
Python
볡사

CSV 파일 읽기

CSV νŒŒμΌμ„ 읽기 μœ„ν•΄μ„œ reader 객체λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
ν•¨μˆ˜
μ„€λͺ…
reader.next()
λ‹€μŒ 행을 μ½μ–΄μ„œ νŒŒμ‹±ν•œ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
reader.__iter__()
μ΄ν„°λ ˆμ΄ν„° 객체λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
# csv 파일 μ½μ–΄μ˜€κΈ° import csv path = 'C:/ALOHA/PYTHON' file = path + 'test.csv' with open(file, 'r', newline='', encoding='UTF-8') as file: # reader(파일객체, delimiter(κ΅¬λΆ„κΈ°ν˜Έ), quotechar(λ¬Έμžμ—΄κΈ°ν˜Έ)) # quotechar : λ‚˜λ‰˜λ©΄ μ•ˆλ˜λŠ” 데이터λ₯Ό μ–΄λ–€ 기호둜 묢을지 지정 csv_reader = csv.reader(file, delimiter=',', quotechar="'") for line in csv_reader: print(line)
Python
볡사