A A
[Python] 파일 입출력

파일 입출력의 개념

파일 입출력은 파일 시스템을 통해 데이터를 읽고 쓰는 작업을 의미합니다.
이를 통해 프로그램은 데이터 영속성을 유지하고, 외부 데이터 소스와 연동하며, 대용량 데이터를 처리할 수 있습니다.

 

  • 데이터 영속성 유지: 프로그램이 종료되더라도 데이터를 저장하고, 이후에 다시 사용할 수 있습니다.
  • 외부 데이터 소스와의 연동: 파일 입출력을 통해 외부 파일에서 데이터를 읽어오거나, 데이터를 외부 파일에 저장할 수 있습니다.
  • 대용량 데이터 처리: 메모리에 저장하기 힘든 대용량 데이터를 파일에 저장하고 처리할 수 있습니다.

With 문

with 문은 자원 관리가 필요한 코드 블록에서 사용되는 구문입니다.
  • 코드의 가독성과 안전성을 높이며, 자원 해제를 자동으로 처리하여 코드의 안정성을 보장합니다.
  • 특히 파일을 열고 닫는 작업을 자동으로 처리하며, 예외 발생 시에도 파일이 제대로 닫히도록 보장합니다.

with 문 기본 형태

with 표현식 as 변수:
    코드 블록

 

파일 입출력에서 with 문 사용 예시

with open('example.txt', 'r') as file:
    content = file.read()
    print(content)
  • with 문에서는 파일을 열고 닫는 작업을 자동으로 처리합니다.
  • 그리고 예외가 발생하더라도 파일이 제대로 닫히도록 보장합니다.
  • 또한 코드가 더 간결하고 가독성이 높아집니다.

Open 함수

open 함수는 파일을 열고 파일 객체를 반환하는 함수입니다.

Baseline Code

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

Parameter

file: 열려는 파일의 경로와 이름을 지정합니다
mode: 파일을 여는 모드를 지정합니다. 기본값은 읽기 모드('r')입니다
'r': 읽기 모드
'w': 쓰기 모드 (기존 파일을 덮어씀)
'a': 추가 모드 (파일 끝에 데이터를 추가)
'b': 바이너리 모드
't': 텍스트 모드 (기본값)
encoding: 텍스트 모드에서 사용할 인코딩을 지정합니다 (예: 'utf-8')

Open 함수 Example

  • 파일 읽기
with open('example.txt', 'r') as file:
    content = file.read()
    print(content)
  • 파일 쓰기
with open('example.txt', 'w') as file:
    file.write('Hello, World!')
  • 파일 추가 쓰기
with open('example.txt', 'a') as file:
    file.write('\nAppending this line.')
  • 파일을 한 줄씩 읽기
with open('example.txt', 'r') as file:
    for line in file:
        print(line.strip())  # strip()을 사용하여 줄 끝의 개행 문자를 제거

파일 입출력

Mode

파일을 열 때 open 함수의 mode 매개변수를 사용하여 파일을 여는 모드를 지정할 수 있습니다.
  • 'r': 읽기 모드 (기본값). 파일을 읽기 전용으로 엽니다. 파일이 존재하지 않으면 오류가 발생합니다.
  • 'w': 쓰기 모드. 파일을 쓰기 전용으로 엽니다. 파일이 존재하지 않으면 새로 생성하고, 파일이 존재하면 기존 내용을 덮어씁니다.
  • 'a': 추가 모드. 파일을 쓰기 전용으로 열고, 파일의 끝에 데이터를 추가합니다. 파일이 존재하지 않으면 새로 생성합니다.
  • 'b': 이진 모드. 바이너리 파일을 읽거나 쓸 때 사용합니다.
    • 예를 들어, 'rb'는 바이너리 읽기 모드, 'wb'는 바이너리 쓰기 모드입니다.

 

읽기 함수

파일에서 데이터를 읽을 때 사용하는 함수들입니다.
  • 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.strip())
        line = file.readline()
  • readlines(): 파일 전체를 읽어 각 줄을 요소로 하는 리스트를 반환합니다.
with open('example.txt', 'r') as file:
    lines = file.readlines()
    for line in lines:
        print(line.strip())

 

쓰기 함수

파일에 데이터를 쓸 때 사용하는 함수들입니다.
  • write(): 문자열을 파일에 씁니다.
with open('example.txt', 'w') as file:
    file.write('Hello, World!')
  • writelines(): 문자열 리스트를 파일에 씁니다.
lines = ['First line\n', 'Second line\n', 'Third line\n']
with open('example.txt', 'w') as file:
    file.writelines(lines)

CSV 파일 처리

CSV(Comma-Separated Values)는 쉼표로 구분된 값들을 가지는 텍스트 파일 형식입니다.
CSV 파일은 데이터 교환의 표준 형식으로, 다양한 애플리케이션 간의 호환성 때문에 널리 사용됩니다.

 

CSV 모듈

  • csv.reader는 CSV 파일을 읽어들입니다.
import csv

with open('example.csv', 'r', newline='') as file:
    reader = csv.reader(file)
    for row in reader:
        print(row)
  • csv.writer는 CSV 파일에 씁니다.
import csv

with open('example.csv', 'w', newline='') as file:
    writer = csv.writer(file)
    writer.writerow(['name', 'age', 'city'])
    writer.writerow(['Alice', 30, 'New York'])
    writer.writerow(['Bob', 25, 'Los Angeles'])
  • csv.DictReader는 딕셔너리 형태로 CSV 파일을 읽어들입니다.
import csv

with open('example.csv', 'r', newline='') as file:
    reader = csv.DictReader(file)
    for row in reader:
        print(row)
  • csv.DictWriter는 딕셔너리 형태로 CSV 파일에 씁니다.
import csv

with open('example.csv', 'w', newline='') as file:
    fieldnames = ['name', 'age', 'city']
    writer = csv.DictWriter(file, fieldnames=fieldnames)
    writer.writeheader()
    writer.writerow({'name': 'Alice', 'age': 30, 'city': 'New York'})
    writer.writerow({'name': 'Bob', 'age': 25, 'city': 'Los Angeles'})

Pandas 모듈

Pandas는 데이터 조작 및 분석을 위한 Python 라이브러리로, CSV 파일을 처리하는 데 매우 유용합니다.
  • pandas.read_csv 함수는 CSV 파일을 읽어 데이터프레임으로 반환합니다.
import pandas as pd

df = pd.read_csv('example.csv')
print(df)
  • pandas.DataFrame.to_csv 메서드는 데이터프레임을 CSV 파일로 저장합니다.
import pandas as pd

data = {
    'name': ['Alice', 'Bob'],
    'age': [30, 25],
    'city': ['New York', 'Los Angeles']
}
df = pd.DataFrame(data)
df.to_csv('example.csv', index=False)

JSON 데이터 처리

JSON?

JSON(JavaScript Object Notation)은 가벼운 데이터 교환 형식으로, 사람과 기계 모두 읽기 쉬운 형식입니다
  • JSON은 키-값 쌍으로 데이터를 구조화하며, 웹 애플리케이션과 서버 간의 데이터 교환에서 자주 사용됩니다.
  • 데이터 교환: 웹 애플리케이션과 서버 간의 데이터 교환에서 JSON 형식을 자주 사용합니다.
  • 구조화된 데이터 저장: JSON을 사용하면 복잡한 데이터 구조를 손쉽게 저장하고 불러올 수 있습니다.

 

JSON 모듈

Python의 json 모듈을 사용하여 JSON 데이터를 쉽게 처리할 수 있습니다.
  • json.dumps() 는 Python 객체를 JSON 문자열로 변환합니다.
import json

data = {'name': 'Alice', 'age': 30, 'city': 'New York'}
json_string = json.dumps(data)
print(json_string)

# Output: {"name": "Alice", "age": 30, "city": "New York"}
  • json.loads() 는 JSON 문자열을 Python 객체로 변환합니다.
import json

json_string = '{"name": "Alice", "age": 30, "city": "New York"}'
data = json.loads(json_string)
print(data)

# Output: {'name': 'Alice', 'age': 30, 'city': 'New York'}
  • json.dump() 는 Python 객체를 JSON 파일로 저장합니다.
import json

data = {'name': 'Alice', 'age': 30, 'city': 'New York'}
with open('data.json', 'w') as file:
    json.dump(data, file)
  • json.load() 는 JSON 파일을 Python 객체로 불러옵니다.
import json

with open('data.json', 'r') as file:
    data = json.load(file)
    print(data)  # Output: {'name': 'Alice', 'age': 30, 'city': 'New York'}