파일 입출력
파일 입출력
Python에서 파일 입출력(File I/O)은 open()
함수를 사용하여 파일을 읽고 쓰는 작업을 수행한다. 파일을 다룰 때는 반드시 파일을 열고, 작업 후 닫아야 한다.
개념 | 설명 |
---|---|
파일 열기 | open("파일명", "모드") |
파일 모드 | "r" , "w" , "a" , "b" , "t" |
파일 쓰기 | write() 사용 |
파일 읽기 | read() , readline() , readlines() |
자동 닫기 | with open("파일명") as file: |
CSV 파일 | csv.reader() , csv.writer() |
JSON 파일 | json.load() , json.dump() |
파일 입출력을 활용하면 데이터를 저장하고 불러오는 작업을 쉽게 수행할 수 있다.
파일 열기
Python에서 파일을 열 때는 open("파일명", "모드")
를 사용한다. 파일을 열면 파일 객체(file object)가 반환되며, 이후 읽기(read()
), 쓰기(write()
) 등의 작업을 수행할 수 있다.
파일 열기 기본 문법
file = open("example.txt", "r") # 파일 열기
# 파일 작업 수행
file.close() # 파일 닫기
open("파일명", "모드")
를 사용하여 파일 열기
- 파일을 사용한 후에는 반드시
close()
를 호출하여 파일을 닫아야 함
파일 열기 모드
파일은 다양한 모드로 열 수 있다.
모드 | 설명 |
---|---|
"r" |
읽기 모드 (파일이 존재해야 함) |
"w" |
쓰기 모드 (파일이 없으면 생성, 있으면 덮어쓰기) |
"a" |
추가 모드 (파일이 없으면 생성, 있으면 이어쓰기) |
"x" |
새로운 파일 생성 (파일이 이미 있으면 오류 발생) |
"b" |
바이너리 모드 (예: "rb" , "wb" ) |
"t" |
텍스트 모드 (기본값) |
- (1) 읽기 모드 (
"r"
) -
- 파일이 존재해야 하며, 파일을 읽기만 가능
# "example.txt" 파일이 존재해야 함
file = open("example.txt", "r")
= file.read() # 파일 전체 읽기
content print(content)
file.close()
- (2) 쓰기 모드 (
"w"
) -
- 파일이 없으면 새로 생성됨.
- 파일이 있으면 기존 내용이 삭제됨.
- 파일이 없으면 새로 생성됨.
file = open("example.txt", "w")
file.write("Hello, Python!\n")
file.write("파일 입출력 예제입니다.\n")
file.close()
- (3) 추가 모드 (
"a"
) -
- 파일이 없으면 새로 생성됨
- 파일이 있으면 기존 내용은 유지되며, 새로운 내용이 추가됨
- 파일이 없으면 새로 생성됨
file = open("example.txt", "a")
file.write("추가된 내용입니다.\n")
file.close()
- (4) 새로운 파일 생성 (
"x"
) -
- 파일이 없으면 새로 생성됨
- 파일이 이미 존재하면 오류 발생
- 파일이 없으면 새로 생성됨
file = open("new_file.txt", "x") # 파일이 이미 있으면 에러 발생
file.write("새로운 파일 생성\n")
file.close()
- (5) 바이너리 모드 (
"rb"
,"wb"
) -
- 이미지, 오디오, 동영상 같은 바이너리 파일을 처리할 때 사용
# 바이너리 파일 읽기
file = open("image.jpg", "rb")
= file.read()
binary_data file.close()
# 바이너리 파일 쓰기
file = open("copy.jpg", "wb")
file.write(binary_data)
file.close()
with 문을 사용한 파일 열기
파일을 열고 닫는 작업을 자동으로 처리하기 위해 with open()
구문을 사용하면 편리하다.
with open("example.txt", "r") as file:
= file.read()
content print(content) # 파일이 자동으로 닫힘
with
문을 사용하면close()
를 호출할 필요가 없음- 예외 발생 시에도 안전하게 파일이 닫힘
파일 존재 여부 확인
파일을 열기 전에 존재 여부를 확인하려면 os.path.exists()
를 사용할 수 있다.
import os
if os.path.exists("example.txt"):
with open("example.txt", "r") as file:
print(file.read())
else:
print("파일이 존재하지 않습니다.")
파일 쓰기
Python에서 파일에 데이터를 저장하려면 open("파일명", "w")
또는 "a"
모드를 사용하여 파일을 연 후, write()
함수를 사용하면 된다. 파일 작업이 끝난 후에는 반드시 close()
또는 with open()
을 사용하여 파일을 닫아야 한다.
개념 | 설명 |
---|---|
파일 쓰기 | open("파일명", "w") 후 write() 사용 |
추가 모드 | open("파일명", "a") (기존 내용 유지) |
새 파일 생성 | open("파일명", "x") (파일이 존재하면 오류) |
자동 닫기 | with open("파일명") as file: 사용 |
여러 줄 쓰기 | writelines() 사용 |
CSV 파일 저장 | csv.writer() 사용 |
JSON 파일 저장 | json.dump() 사용 |
Python에서 파일 쓰기를 활용하면 다양한 방식으로 데이터를 저장할 수 있다.
모드 | 설명 |
---|---|
"w" |
쓰기 모드 (파일이 없으면 생성, 있으면 기존 내용 삭제) |
"a" |
추가 모드 (파일이 없으면 생성, 있으면 기존 내용 유지하고 새로운 내용 추가) |
"x" |
파일 생성 모드 (파일이 이미 있으면 오류 발생) |
- (1) 쓰기 모드 (
"w"
) -
- 기존 파일이 있으면 덮어쓰기(기존 내용 삭제)
- 파일이 없으면 새로 생성
- 기존 파일이 있으면 덮어쓰기(기존 내용 삭제)
# 파일 열기 (쓰기 모드, 기존 내용 삭제)
file = open("example.txt", "w")
# 파일에 문자열 쓰기
file.write("Hello, Python!\n")
file.write("파일 쓰기 예제입니다.\n")
# 파일 닫기
file.close()
- 파일 내용 (
example.txt
) -
Hello, Python! 파일 쓰기 예제입니다.
- (2) 추가 모드 (
"a"
) -
- 기존 파일이 있으면 기존 내용 유지 + 새로운 내용 추가
- 파일이 없으면 새로 생성됨
- 기존 파일이 있으면 기존 내용 유지 + 새로운 내용 추가
file = open("example.txt", "a") # 추가 모드로 열기
file.write("추가된 내용입니다.\n") # 기존 내용 유지
file.close()
- 파일 내용 (
example.txt
) -
Hello, Python! 파일 쓰기 예제입니다. 추가된 내용입니다.
- (3) 파일 생성 모드 (
"x"
) -
- 새로운 파일을 생성
- 파일이 이미 존재하면 오류 발생
- 새로운 파일을 생성
file = open("new_file.txt", "x") # 새 파일 생성
file.write("새로운 파일입니다.\n")
file.close()
파일이 이미 존재할 경우 :
FileExistsError: [Errno 17] File exists: 'new_file.txt'
with 문을 사용한 파일 쓰기
파일을 열고 닫는 작업을 자동으로 처리하기 위해 with open()
을 사용하는 것이 좋다.
with open("example.txt", "w") as file:
file.write("자동으로 파일이 닫힙니다.\n")
file.write("with open()을 사용하면 close()가 필요 없습니다.\n")
여러 줄 쓰기
writelines()
를 사용하면 리스트 형식의 여러 줄을 한 번에 쓸 수 있다.
= ["첫 번째 줄\n", "두 번째 줄\n", "세 번째 줄\n"]
lines
with open("example.txt", "w") as file:
file.writelines(lines)
- 파일 내용 (
example.txt
) -
첫 번째 줄 두 번째 줄 세 번째 줄
숫자 데이터 쓰기
write()
는 문자열만 저장할 수 있으므로 숫자는 str()
로 변환하여 저장해야 한다.
with open("numbers.txt", "w") as file:
for i in range(1, 6):
file.write(f"숫자: {i}\n")
- 파일 내용 (
numbers.txt
) -
숫자: 1 숫자: 2 숫자: 3 숫자: 4 숫자: 5
파일 읽기
Python에서 파일을 읽을 때는 open()
함수로 파일을 연 후, 다양한 방법으로 파일을 읽을 수 있다. 파일을 읽은 후에는 반드시 close()
를 호출하거나 with open()
을 사용해 자동으로 파일을 닫아야 한다.
방법 | 설명 |
---|---|
전체 내용 읽기 | file.read() |
한 줄씩 읽기 | file.readline() |
여러 줄 읽기 | file.readlines() |
자동 닫기 | with open("파일명") as file: 사용 |
바이너리 파일 읽기 | open("파일명e", "rb") 사용 |
파일 일부 읽기 | file.read(size) |
파일을 읽을 때는 필요한 방식에 맞게 read()
, readline()
, readlines()
를 사용하여 효율적으로 파일 내용을 처리할 수 있다.
파일 열기 모드
모드 | 설명 |
---|---|
"r" |
읽기 모드 (파일이 존재해야 함) |
"rb" |
바이너리 읽기 모드 (이미지, 오디오 파일 등) |
파일 읽기 방법
(1) 전체 내용 읽기 (read()
)
read()
는 파일의 전체 내용을 하나의 문자열로 반환한다.
# 파일을 읽기 모드로 열기
file = open("example.txt", "r")
# 전체 내용 읽기
= file.read()
content
# 읽은 내용 출력
print(content)
# 파일 닫기
file.close()
- 파일 내용 (
example.txt
) -
Hello, Python! 파일 읽기 예제입니다.
- 출력 결과
-
Hello, Python! 파일 읽기 예제입니다.
(2) 한 줄씩 읽기 (readline()
)
readline()
은 파일에서 한 줄씩 읽어서 문자열로 반환한다.
- 줄바꿈 문자(
\n
)가 포함된 채로 반환된다.
# 파일을 읽기 모드로 열기
file = open("example.txt", "r")
# 첫 번째 줄 읽기
= file.readline()
line1 print(line1)
# 두 번째 줄 읽기
= file.readline()
line2 print(line2)
# 파일 닫기
file.close()
- 파일 내용 (
example.txt
) -
Hello, Python! 파일 읽기 예제입니다.
- 출력 결과
-
Hello, Python! 파일 읽기 예제입니다.
(3) 여러 줄 읽기 (readlines()
)
readlines()
는 파일을 전체 줄을 리스트로 반환한다.
- 각 줄은 줄바꿈 문자(
\n
)와 함께 리스트의 항목으로 저장된다.
# 파일을 읽기 모드로 열기
file = open("example.txt", "r")
# 모든 줄을 리스트로 읽기
= file.readlines()
lines
# 리스트 내용 출력
print(lines)
# 파일 닫기
file.close()
- 파일 내용 (
example.txt
) -
Hello, Python! 파일 읽기 예제입니다.
- 출력 결과
-
['Hello, Python!\n', '파일 읽기 예제입니다.\n']
(4) with
문을 사용한 파일 읽기
with open()
구문을 사용하면 파일을 자동으로 닫을 수 있어 파일 관리가 편리하다.
with open("example.txt", "r") as file:
= file.read() # 전체 내용 읽기
content print(content)
with
문을 사용하면close()
를 명시적으로 호출할 필요가 없으며, 예외가 발생해도 파일이 안전하게 닫힌다.
바이너리 파일 읽기
- 바이너리 파일을 읽을 때는
"rb"
모드를 사용한다.
- 읽은 데이터는 바이트 객체로 반환된다.
with open("image.jpg", "rb") as file:
= file.read() # 이미지 파일을 바이트로 읽기
binary_data print(binary_data[:10]) # 바이트 일부 출력
- 바이너리 파일을 읽은 후에는 바이트 객체로 처리되며, 일반적인 문자열 처리 방법과는 다르다.
파일에서 일부만 읽기
read(size)
를 사용하면 파일에서 지정한 크기만큼 데이터를 읽을 수 있다.
with open("example.txt", "r") as file:
# 첫 5글자만 읽기
= file.read(5)
content print(content)
- 출력 결과
-
Hello
read(size)
는 파일의 처음부터 지정된 바이트 수만큼 읽고, 이후 다음 호출에서 나머지를 읽는다.
CSV 파일 읽고 쓰기
csv
모듈을 사용하여 CSV 파일을 읽고 쓸 수 있다. 자세한 내용은 CSV 파일을 참고한다.
CSV 파일 쓰기
import csv
with open("data.csv", "w", newline="", encoding="utf-8") as file:
= csv.writer(file)
writer "이름", "나이", "직업"]) # 헤더 작성
writer.writerow(["철수", 25, "개발자"])
writer.writerow(["영희", 30, "디자이너"]) writer.writerow([
- 파일 내용 (
data.csv
) -
이름,나이,직업 철수,25,개발자 영희,30,디자이너
CSV 파일 읽기
with open("data.csv", "r", encoding="utf-8") as file:
= csv.reader(file)
reader for row in reader:
print(row)
- 출력 결과
-
['이름', '나이', '직업'] ['철수', '25', '개발자'] ['영희', '30', '디자이너']
JSON 파일 읽고 쓰기
json
모듈을 사용하여 JSON 파일을 읽고 쓸 수 있다. 자세한 내용은 JSON 파일을 참고한다.
JSON 파일 쓰기
import json
= {"이름": "철수", "나이": 25, "직업": "개발자"}
data
with open("data.json", "w", encoding="utf-8") as file:
file, ensure_ascii=False, indent=4) # JSON 저장 json.dump(data,
- 파일 내용 (
data.json
) -
{ "이름": "철수", "나이": 25, "직업": "개발자" }
JSON 파일 읽기
with open("data.json", "r", encoding="utf-8") as file:
= json.load(file)
data print(data)
- 출력 결과
-
{'이름': '철수', '나이': 25, '직업': '개발자'}