Created at : 2024-09-02 13:26
Auther: Soo.Y
6. 파일 입출력 (File I/O)
파일 입출력은 데이터를 파일에 저장하거나 파일로부터 데이터를 읽어오는 작업을 의미합니다. 파이썬에서는 파일을 열고, 읽고, 쓰고, 닫는 작업을 매우 쉽게 수행할 수 있도록 다양한 기능을 제공합니다. 이 장에서는 파일 입출력의 기본 개념부터 고급 기능까지 다룰 것입니다.
6.1 파일 열기 (Opening Files)
파이썬에서 파일을 열기 위해서는 open()
함수를 사용합니다. open()
함수는 파일을 열고, 파일 객체를 반환합니다. 이 객체를 사용하여 파일을 읽거나 쓸 수 있습니다.
- 기본 문법:
파일객체 = open(파일이름, 모드)
-
파일 열기 모드:
'r'
: 읽기 모드. 파일이 존재하지 않으면 오류 발생.'w'
: 쓰기 모드. 파일이 존재하면 내용을 덮어쓰고, 존재하지 않으면 새 파일 생성.'a'
: 추가 모드. 파일이 존재하면 내용의 끝에 추가하고, 존재하지 않으면 새 파일 생성.'b'
: 바이너리 모드. 텍스트 파일이 아닌 바이너리 파일을 읽거나 쓸 때 사용. (예: 이미지 파일)'t'
: 텍스트 모드. 텍스트 파일을 읽거나 쓸 때 사용. (기본값)
-
예제:
# 텍스트 파일을 읽기 모드로 열기
file = open("example.txt", "r")
6.2 파일 읽기 (Reading Files)
파일에서 데이터를 읽는 방법에는 여러 가지가 있습니다. read()
, readline()
, readlines()
메서드를 사용하면 파일 내용을 읽어올 수 있습니다.
read()
: 파일의 전체 내용을 하나의 문자열로 읽어옵니다.
with open("example.txt", "r") as file:
content = file.read()
print(content)
readline()
: 파일에서 한 줄씩 읽어옵니다.
with open("example.txt", "r") as file:
line = file.readline()
while line:
print(line, end='') # 각 줄을 출력
line = file.readline()
readlines()
: 파일의 모든 줄을 읽어 리스트로 반환합니다.
with open("example.txt", "r") as file:
lines = file.readlines()
for line in lines:
print(line, end='')
6.3 파일 쓰기 (Writing Files)
파일에 데이터를 쓰기 위해서는 write()
또는 writelines()
메서드를 사용할 수 있습니다.
write()
: 파일에 문자열을 씁니다. 쓰기 모드('w'
또는'a'
)로 열어야 합니다.
with open("example.txt", "w") as file:
file.write("Hello, World!\n")
file.write("파일에 내용을 작성합니다.\n")
writelines()
: 문자열의 리스트를 파일에 씁니다.
lines = ["첫 번째 줄\n", "두 번째 줄\n", "세 번째 줄\n"]
with open("example.txt", "w") as file:
file.writelines(lines)
6.4 파일 닫기 (Closing Files)
파일 작업이 끝나면 반드시 close()
메서드를 호출하여 파일을 닫아야 합니다. 파일을 닫지 않으면 데이터 손실이 발생하거나 파일이 제대로 저장되지 않을 수 있습니다. 하지만 with
문을 사용하면 파일을 자동으로 닫을 수 있어 안전합니다.
- 파일 닫기:
file = open("example.txt", "r")
# 파일 작업 수행
file.close()
with
문 사용:
with open("example.txt", "r") as file:
content = file.read()
print(content)
with
문을 사용하면 코드 블록이 종료될 때 파일이 자동으로 닫힙니다.
6.5 예외 처리와 파일 입출력
파일 작업 중 예기치 않은 오류가 발생할 수 있습니다. 이러한 경우, 예외 처리를 통해 오류를 처리하고 프로그램이 비정상적으로 종료되지 않도록 할 수 있습니다.
- 예외 처리와 파일 입출력:
try:
with open("example.txt", "r") as file:
content = file.read()
print(content)
except FileNotFoundError:
print("파일을 찾을 수 없습니다.")
except IOError:
print("파일을 읽는 중에 오류가 발생했습니다.")
이 예제에서는 파일이 존재하지 않거나 읽는 중에 오류가 발생할 경우, 예외가 처리됩니다.
6.6 CSV 파일 다루기
CSV(Comma-Separated Values) 파일은 데이터를 쉼표로 구분하여 저장하는 텍스트 파일입니다. 파이썬의 csv
모듈을 사용하여 CSV 파일을 쉽게 읽고 쓸 수 있습니다.
- CSV 파일 읽기:
import csv
with open("example.csv", "r") as file:
reader = csv.reader(file)
for row in reader:
print(row)
- CSV 파일 쓰기:
import csv
with open("example.csv", "w", newline='') as file:
writer = csv.writer(file)
writer.writerow(["이름", "나이", "도시"])
writer.writerow(["홍길동", 30, "서울"])
writer.writerow(["이몽룡", 25, "남원"])
6.7 JSON 파일 다루기
JSON(JavaScript Object Notation) 파일은 데이터를 구조화하여 저장하는 데 사용되는 파일 형식입니다. 파이썬의 json
모듈을 사용하여 JSON 파일을 읽고 쓸 수 있습니다.
- JSON 파일 읽기:
import json
with open("example.json", "r") as file:
data = json.load(file)
print(data)
- JSON 파일 쓰기:
import json
data = {
"이름": "홍길동",
"나이": 30,
"도시": "서울"
}
with open("example.json", "w") as file:
json.dump(data, file, indent=4)
이 예제에서 indent=4
는 JSON 파일을 읽기 쉽게 들여쓰기를 적용하여 저장합니다.
6.8 파일과 디렉토리 관리
파이썬의 os
및 shutil
모듈을 사용하면 파일과 디렉토리를 관리할 수 있습니다.
- 파일 존재 여부 확인:
import os
if os.path.exists("example.txt"):
print("파일이 존재합니다.")
else:
print("파일이 존재하지 않습니다.")
- 파일 삭제:
import os
os.remove("example.txt")
- 디렉토리 생성:
import os
os.mkdir("새로운_폴더")
- 디렉토리 삭제:
import os
os.rmdir("새로운_폴더")
- 파일 및 디렉토리 복사:
import shutil
shutil.copy("example.txt", "example_copy.txt") # 파일 복사
shutil.copytree("원본_폴더", "복사된_폴더") # 디렉토리 복사
6.9 바이너리 파일 다루기
바이너리 파일은 텍스트가 아닌 데이터를 저장하는 파일로, 이미지, 오디오, 비디오 파일 등이 포함됩니다. 파이썬에서는 'b'
모드를 사용하여 바이너리 파일을 읽거나 쓸 수 있습니다.
- 바이너리 파일 읽기:
with open("example.jpg", "rb") as file:
data = file.read()
print(data[:20]) # 처음 20바이트만 출력
- 바이너리 파일 쓰기:
with open("copy.jpg", "wb") as file:
file.write(data)
이 예제는 이미지 파일을 바이너리 모드로 읽고, 복사본을 생성하는 코드입니다.
이제 파이썬에서 파일 입출력에 대해 기본적으로 이해하게 되었습니다. 파일 입출력은 데이터를 영구적으로 저장하거나, 외부 파일로부터 데이터를 불러와 처리하는 데 매우 중요합니다.