파일 입출력은 외부 파일의 데이터를 읽고 쓰는 것을 의미한다. 파일 입출력은 데이터의 영구적인 보관이 필요한 경우, 파일로부터 데이터를 읽어와 처리하거나 결과를 파일에 저장할 때 사용한다.
파일 열기와 닫기
파일을 열기 위해서는 open() 함수를 사용합니다. open() 함수는 파일의 경로와 함께 사용되며, 파일 객체를 반환한다.
파일을 사용한 후에는 반드시 close() 메서드를 호출하여 파일을 닫아야 한다. 파일을 닫지 않으면 자원 누수(resource leak)가 발생할 수 있으므로 주의해야 한다.
file = open("example.txt", "r") # 파일 열기 (읽기 모드)
# 파일을 사용하여 작업 수행
file.close() # 파일 닫기
위 코드의 "example.txt"는 파일의 경로이며, "r"은 파일을 읽기 모드로 열기 위한 인자이다. 다른 파일 모드로 열고 싶을 경우에는 "w"(쓰기 모드), "a"(추가 모드) 등을 사용할 수 있다.
파일 읽기
파일을 읽기 모드로 열어서 데이터를 읽을 수 있다. 파일에서 데이터를 읽을 때는 read(), readline(), readlines() 등의 메서드를 사용한다.
- read(): 파일의 전체 내용을 문자열로 읽어온다.
- readline(): 파일에서 한 줄씩 문자열로 읽어온다.
- readlines(): 파일의 모든 줄을 읽어 리스트로 반환한다.
file = open("example.txt", "r") # 파일 열기 (읽기 모드)
# 파일 전체 내용 읽기
content = file.read()
print(content)
# 한 줄씩 읽기
line = file.readline()
print(line)
# 모든 줄을 리스트로 읽기
lines = file.readlines()
print(lines)
file.close() # 파일 닫기
파일 쓰기
파일을 쓰기 모드로 열어서 데이터를 파일에 쓸 수 있다.
파일에 데이터를 쓸 때는 write() 메서드를 사용한다.
file = open("example.txt", "w") # 파일 열기 (쓰기 모드)
# 파일에 데이터 쓰기
file.write("Hello, World!\n")
file.write("This is a sample text.")
file.close() # 파일 닫기
위 코드에서 "Hello, World!\n"은 파일에 쓰일 문자열이다. \n은 줄 바꿈을 나타내며, 새로운 줄에 데이터를 쓰고 싶을 때 사용할 수 있다.
with 문을 사용한 파일 입출력
파일 입출력 후에는 항상 파일을 닫아야 하지만, 간단한 코드에서는 파일을 열고 닫는 과정을 자동화할 수 있다. 이를 위해 with 문을 사용할 수 있으며, with 문을 사용하면 블록 내에서 파일을 열고 사용한 후 자동으로 파일을 닫아주게 된다.
with open("example.txt", "r") as file:
content = file.read()
print(content)
위 코드에서 with open("example.txt", "r") as file: 부분은 파일을 열고 file이라는 변수에 파일 객체를 할당하는 구문이다. with 문 블록 안에서 파일을 사용한 후에는 자동으로 파일이 닫히며, 이렇게 하면 close() 메서드를 호출하지 않아도 되므로 코드가 간결해진다.
디렉토리 다루기
# 디렉토리 생성
os.mkdir("my_folder")
# 디렉토리 삭제
os.rmdir("my_folder")
# 디렉토리 존재 여부 확인
if os.path.exists("my_folder"):
print("my_folder가 존재합니다.")
else:
print("my_folder가 존재하지 않습니다.")
# 디렉토리 내 파일/하위 디렉토리 목록 확인
files = os.listdir("my_folder")
for file in files:
print(file)
# 현재 작업 디렉토리 확인
current_dir = os.getcwd()
print(current_dir)
이진 파일 입출력
파이썬에서 이진 파일(binary file)을 다루려면 open() 함수의 모드로 'rb'(읽기 모드) 또는 'wb'(쓰기 모드)를 사용한다.
이진 파일을 읽을 때는 read() 메서드를, 이진 파일에 쓸 때는 write() 메서드를 사용한다.
# 이진 파일 읽기
with open("image.jpg", "rb") as file:
data = file.read()
# 데이터 처리 작업
# 이진 파일 쓰기
with open("output.bin", "wb") as file:
data = b"\x48\x65\x6c\x6c\x6f" # 이진 데이터
file.write(data)
파일 포맷 처리
파이썬은 다양한 파일 포맷을 처리할 수 있는 라이브러리를 제공한다. 예를 들어, CSV 파일을 다루기 위해서는 csv 모듈을 사용하고, JSON 파일을 다루기 위해서는 json 모듈을 사용한다.
각각의 모듈은 해당 파일 포맷에 특화된 함수와 메서드를 제공한다.
import csv
import json
# CSV 파일 읽기
with open("data.csv", "r") as file:
reader = csv.reader(file)
for row in reader:
print(row)
# CSV 파일 쓰기
data = [
["Name", "Age", "City"],
["John", "25", "New York"],
["Alice", "30", "London"],
]
with open("output.csv", "w", newline="") as file:
writer = csv.writer(file)
writer.writerows(data)
# JSON 파일 읽기
with open("data.json", "r") as file:
data = json.load(file)
print(data)
# JSON 파일 쓰기
data = {
"Name": "John",
"Age": 25,
"City": "New York",
}
with open("output.json", "w") as file:
json.dump(data, file)
추가적인 파일 메서드
os 모듈을 사용하여 파일 위치 이동, 파일 속성 조회, 파일 삭제 등의 작업을 수행할 수 있다.
import os
# 파일 위치 이동
os.chdir("path/to/directory")
# 파일 속성 조회
file_stat = os.stat("file.txt")
print(file_stat.st_size) # 파일 크기
# 파일 삭제
os.remove("file.txt")
컨텍스트 관리자
컨텍스트 관리자를 사용하면 파일 입출력 시 자원 관리를 효율적으로 처리할 수 있다.
이때에도 with 문을 사용하여 파일을 열고 자동으로 닫히도록 할 수 있다.
with open("file.txt", "r") as file:
data = file.read()
# 파일 처리 작업
# with 블록이 종료되면 파일이 자동으로 닫힘