파일 입출력

파일 입출력

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, '직업': '개발자'}

참고자료