파일 입출력
python, numpy, pandas, 기초, 문법
파일 입출력
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")
content = file.read() # 파일 전체 읽기
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")
binary_data = file.read()
file.close()
# 바이너리 파일 쓰기
file = open("copy.jpg", "wb")
file.write(binary_data)
file.close()with 문을 사용한 파일 열기
파일을 열고 닫는 작업을 자동으로 처리하기 위해 with open() 구문을 사용하면 편리하다.
with open("example.txt", "r") as file:
content = file.read()
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()를 사용하면 리스트 형식의 여러 줄을 한 번에 쓸 수 있다.
lines = ["첫 번째 줄\n", "두 번째 줄\n", "세 번째 줄\n"]
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")
# 전체 내용 읽기
content = file.read()
# 읽은 내용 출력
print(content)
# 파일 닫기
file.close()- 파일 내용 (
example.txt) -
Hello, Python! 파일 읽기 예제입니다.
- 출력 결과
-
Hello, Python! 파일 읽기 예제입니다.
(2) 한 줄씩 읽기 (readline())
readline()은 파일에서 한 줄씩 읽어서 문자열로 반환한다.
- 줄바꿈 문자(
\n)가 포함된 채로 반환된다.
# 파일을 읽기 모드로 열기
file = open("example.txt", "r")
# 첫 번째 줄 읽기
line1 = file.readline()
print(line1)
# 두 번째 줄 읽기
line2 = file.readline()
print(line2)
# 파일 닫기
file.close()- 파일 내용 (
example.txt) -
Hello, Python! 파일 읽기 예제입니다.
- 출력 결과
-
Hello, Python! 파일 읽기 예제입니다.
(3) 여러 줄 읽기 (readlines())
readlines()는 파일을 전체 줄을 리스트로 반환한다.
- 각 줄은 줄바꿈 문자(
\n)와 함께 리스트의 항목으로 저장된다.
# 파일을 읽기 모드로 열기
file = open("example.txt", "r")
# 모든 줄을 리스트로 읽기
lines = file.readlines()
# 리스트 내용 출력
print(lines)
# 파일 닫기
file.close()- 파일 내용 (
example.txt) -
Hello, Python! 파일 읽기 예제입니다.
- 출력 결과
-
['Hello, Python!\n', '파일 읽기 예제입니다.\n']
(4) with 문을 사용한 파일 읽기
with open()구문을 사용하면 파일을 자동으로 닫을 수 있어 파일 관리가 편리하다.
with open("example.txt", "r") as file:
content = file.read() # 전체 내용 읽기
print(content)with문을 사용하면close()를 명시적으로 호출할 필요가 없으며, 예외가 발생해도 파일이 안전하게 닫힌다.
바이너리 파일 읽기
- 바이너리 파일을 읽을 때는
"rb"모드를 사용한다.
- 읽은 데이터는 바이트 객체로 반환된다.
with open("image.jpg", "rb") as file:
binary_data = file.read() # 이미지 파일을 바이트로 읽기
print(binary_data[:10]) # 바이트 일부 출력- 바이너리 파일을 읽은 후에는 바이트 객체로 처리되며, 일반적인 문자열 처리 방법과는 다르다.
파일에서 일부만 읽기
read(size)를 사용하면 파일에서 지정한 크기만큼 데이터를 읽을 수 있다.
with open("example.txt", "r") as file:
# 첫 5글자만 읽기
content = file.read(5)
print(content)- 출력 결과
-
Hello
read(size)는 파일의 처음부터 지정된 바이트 수만큼 읽고, 이후 다음 호출에서 나머지를 읽는다.
CSV 파일 읽고 쓰기
csv 모듈을 사용하여 CSV 파일을 읽고 쓸 수 있다. 자세한 내용은 CSV 파일을 참고한다.
CSV 파일 쓰기
import csv
with open("data.csv", "w", newline="", encoding="utf-8") as file:
writer = csv.writer(file)
writer.writerow(["이름", "나이", "직업"]) # 헤더 작성
writer.writerow(["철수", 25, "개발자"])
writer.writerow(["영희", 30, "디자이너"])- 파일 내용 (
data.csv) -
이름,나이,직업 철수,25,개발자 영희,30,디자이너
CSV 파일 읽기
with open("data.csv", "r", encoding="utf-8") as file:
reader = csv.reader(file)
for row in reader:
print(row)- 출력 결과
-
['이름', '나이', '직업'] ['철수', '25', '개발자'] ['영희', '30', '디자이너']
JSON 파일 읽고 쓰기
json 모듈을 사용하여 JSON 파일을 읽고 쓸 수 있다. 자세한 내용은 JSON 파일을 참고한다.
JSON 파일 쓰기
import json
data = {"이름": "철수", "나이": 25, "직업": "개발자"}
with open("data.json", "w", encoding="utf-8") as file:
json.dump(data, file, ensure_ascii=False, indent=4) # JSON 저장- 파일 내용 (
data.json) -
{ "이름": "철수", "나이": 25, "직업": "개발자" }
JSON 파일 읽기
with open("data.json", "r", encoding="utf-8") as file:
data = json.load(file)
print(data)- 출력 결과
-
{'이름': '철수', '나이': 25, '직업': '개발자'}