본문 바로가기
프로그래밍/파이썬 Python

[파이썬 문법] 8. 파일입출력 기초 총정리(3단계 작업,9종류파일 기본입출력)

by it-수다쟁이증후군 2023. 4. 13.

오늘.ssam)
파이썬 파일입출력은 3단계로 나눌수 있습니다. 열고->작업(읽기/쓰기)->닫고 쉽죠. 어려운점은 어떤파일을 작업할것이냐 입니다. 왜 냐면 그 파일의 데이터 구조를 알아야 하고, 그 특성또한 이해 하고 있어야 하기때문입니다.

어려운 작업은 나중에 하고^^!. 오늘은 쉬운 파일3단계와 파일입출력의 전반적 개념 그리고 특정 파일의 기본 입출력방식(9가지)을 알아보겠습니다.

Q1.나)
파일 입출력의 개념과 사용법 에 대해서 설명해주세요.

"8-파일입출력-총정리-3단계"문장을 타이포그라피로 만든 썸네일

A1.ssam)
파일 입출력은 컴퓨터에서 데이터를 읽고 쓰는 작업을 말합니다. 파이썬에서는 내장 함수인 open()을 사용하여 파일을 열고, read(), write() 등의 메서드를 사용하여 파일을 읽고 쓸 수 있습니다.

1) 파일 열기(1단계)

  • open() 함수를 사용하여 파일을 열 수 있음
  • open() 함수는 파일 이름과 파일 모드를 인자로 받음
  • 파일 모드에는 'r'(읽기), 'w'(쓰기), 'a'(추가), 'x'(새로 생성) 등이 있음
  • 파일 모드를 생략하면 기본값인 'r' 모드로 열림

2-1) 작업 : 파일 읽기 (2단계)

  • 파일 객체의 read() 메서드를 사용하여 파일을 읽을 수 있음
  • read() 메서드는 파일 전체 내용을 문자열로 반환함
  • 파일 객체를 반복문에 사용하여 한 줄씩 읽을 수도 있음

2-2) 작업 : 파일 쓰기 (2단계)

  • 파일 객체의 write() 메서드를 사용하여 파일에 쓸 수 있음
  • write() 메서드는 인자로 문자열을 받음
  • 파일 객체를 열 때 모드를 'w'나 'a'로 설정해야 함

3) 파일 닫기 (3단계)

  • 파일을 사용한 후에는 반드시 파일을 닫아야 함
  • 파일 객체의 close() 메서드를 사용하여 파일을 닫을 수 있음
  • 파일 객체를 with 구문에 사용하여 파일을 자동으로 닫을 수도 있음

예를 들어, 다음과 같이 파일을 열고 읽기/쓰기를 수행할 수 있습니다.

##파일 쓰기의 3단계
#1단계 :  파일 열기
file = open('example.txt', 'w')

#2단계 : 파일 쓰기
file.write('Hello, world!')

#3단계 : 파일 닫기
file.close()



##파일 열기의 3단계
#1단계 :  파일 열기
file = open('example.txt', 'r')

#2단계 : 파일 읽기
data = file.read()
print(data)

#3단계 : 파일 닫기
file.close()
  • 'example.txt' 파일을 쓰기 모드로 열고
  • 'Hello, world!' 문자열을 파일에 쓴 뒤,
  • 파일을 닫습니다.
  • 파일을 읽기 모드로 열고
  • 파일의 내용을 read() 메서드로 읽어들입니다.
  • 마지막으로 파일을 닫습니다.

파일 입출력은 파이썬 프로그래밍에서 매우 중요한 부분이며, 다양한 방식으로 활용됩니다. 이를 통해 파일에 데이터를 쓰거나 파일에서 데이터를 읽어들이는 등의 작업을 수행할 수 있습니다.

Q2.나)
with문을 사용하면 자동으로 닫는다는 말이 무슨 뜻인가요?

A2.ssam)
파일을 열 때 with 문을 사용하면, 파일 작업이 끝난 후 자동으로 파일을 닫아줍니다.

# 쓰기 모드로 파일 열기
with open("example.txt", "w") as file:
    file.write("안녕하세요! 파이썬 파일 입출력 예제입니다.\n")
    file.write("이렇게 여러 줄을 작성할 수 있습니다.\n")

# 읽기 모드로 파일 열기
with open("example.txt", "r") as file:
    content = file.read()

# 읽은 데이터 출력
print(content)

Q3.나)
파일 읽기에서 내용을 파일 전체 내용을 문자열로 반환함 하면 메모리의 부담이 커지거나 그런거 아닌가요?

A3.ssam)
네, 맞습니다. file.read()를 사용하여 파일 전체 내용을 문자열로 반환하면, 파일 크기가 매우 큰 경우 메모리 부담이 커질 수 있습니다. 이러한 상황에서는 파일을 한 줄씩 읽거나, 일정 크기의 덩어리(chunk)로 읽어 처리하는 것이 좋습니다.

1) for문 : 파일 한 줄씩 읽기

with open("example.txt", "r") as file:
    for line in file:
        print(line.strip())  # strip()을 사용하여 줄바꿈 문자를 제거하고 출력

2) file.readline()을 사용하여 한 줄씩 읽을 수도 있습니다.

with open("example.txt", "r") as file:
    line = file.readline()
    while line:
        print(line.strip())
        line = file.readline()

3) 파일을 일정 크기의 덩어리(chunk)로 읽기

chunk_size = 1024  # 1KB 크기로 읽기

with open("example.txt", "r") as file:
    chunk = file.read(chunk_size)
    while chunk:
        # 덩어리(chunk)를 처리하는 코드
        print(chunk)
        chunk = file.read(chunk_size)

이러한 방식을 사용하면, 파일 크기에 상관없이 메모리 부담을 줄일 수 있으며 효율적으로 파일을 읽을 수 있습니다.

Q4.나)
파일의 종류는 수없이 많은데 파이썬은 이에 대해서 어떻게 대응하나요?

A4.ssam)
파이썬은 다양한 파일 형식에 대응할 수 있는 라이브러리와 모듈을 제공하고 있습니다. 여러 파일 형식에 대해 처리하는 방법은 다음과 같습니다.

파일입출력-텍스트-CSV-JSON-바이너리-엑셀-YAML-PDF-이미지-SQLite..txt.txt
3.3 kB

1)텍스트 파일: 기본적인 파일 입출력 함수(open, read, write, close)를 사용하여 처리할 수 있습니다.

2)CSV 파일: csv 모듈을 사용하여 CSV 파일을 읽고 쓸 수 있습니다.

import csv

# CSV 파일 읽기
with open("example.csv", "r") as csvfile:
    reader = csv.reader(csvfile)
    for row in reader:
        print(row)

# CSV 파일 쓰기
with open("example.csv", "w") as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(["이름", "나이", "성별"])
    writer.writerow(["홍길동", "25", "남"])
    writer.writerow(["김영희", "30", "여"])

3)JSON 파일: json 모듈을 사용하여 JSON 파일을 읽고 쓸 수 있습니다.

import json

data = {"이름": "홍길동", "나이": 25, "성별": "남"}

# JSON 파일 쓰기
with open("example.json", "w") as jsonfile:
    json.dump(data, jsonfile)

# JSON 파일 읽기
with open("example.json", "r") as jsonfile:
    loaded_data = json.load(jsonfile)
    print(loaded_data)

4)이진 파일(예: 이미지, 오디오): 바이너리 모드('b' 플래그)로 파일을 열어 처리할 수 있습니다.

# 이미지 파일 복사하기
with open("input_image.jpg", "rb") as infile:
    with open("output_image.jpg", "wb") as outfile:
        data = infile.read()
        outfile.write(data)

5)엑셀 파일 : 엑셀 파일을 처리하려면 openpyxl 라이브러리를 설치하고 사용할 수 있습니다.

pip install openpyxl
import openpyxl

# 엑셀 파일 읽기
workbook = openpyxl.load_workbook("example.xlsx")
sheet = workbook.active
cell = sheet["A1"]
print(cell.value)

# 엑셀 파일 쓰기
workbook = openpyxl.Workbook()
sheet = workbook.active
sheet["A1"] = "안녕하세요"
workbook.save("example.xlsx")

6) YAML 파일: PyYAML 라이브러리를 사용하여 YAML 파일을 읽고 쓸 수 있습니다.

pip install PyYAML
import yaml

data = {"이름": "홍길동", "나이": 25, "성별": "남"}

# YAML 파일 쓰기
with open("example.yaml", "w") as yamlfile:
    yaml.dump(data, yamlfile)

# YAML 파일 읽기
with open("example.yaml", "r") as yamlfile:
    loaded_data = yaml.load(yamlfile, Loader=yaml.FullLoader)
    print(loaded_data)

7) PDF 파일: PyPDF2 라이브러리를 사용하여 PDF 파일을 읽고 쓸 수 있습니다.

pip install PyPDF2
import PyPDF2

# PDF 파일 읽기
with open("example.pdf", "rb") as pdffile:
    reader = PyPDF2.PdfFileReader(pdffile)
    page = reader.getPage(0)
    content = page.extractText()
    print(content)

8) 이미지 파일: Pillow 라이브러리를 사용하여 이미지 파일을 처리할 수 있습니다.

pip install Pillow
from PIL import Image

# 이미지 파일 열기
image = Image.open("example.jpg")

# 이미지 크기 변경
resized_image = image.resize((100, 100))

# 이미지 저장
resized_image.save("resized_example.jpg")

9) SQLite 데이터베이스: 파이썬 내장 sqlite3 모듈을 사용하여 SQLite 데이터베이스를 읽고 쓸 수 있습니다.

import sqlite3

# 데이터베이스 연결
conn = sqlite3.connect("example.db")

# 커서 생성
cursor = conn.cursor()

# 테이블 생성
cursor.execute("""CREATE TABLE IF NOT EXISTS users (
                    id INTEGER PRIMARY KEY,
                    name TEXT NOT NULL,
                    age INTEGER NOT NULL)""")

# 데이터 삽입
cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ("홍길동", 25))

# 데이터 조회
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:
    print(row)

# 변경사항 저장
conn.commit()

# 연결 종료
conn.close()

이 외에도 파이썬은 수많은 라이브러리와 모듈을 통해 다양한 파일 형식과 데이터를 처리할 수 있습니다. 각 파일 형식에 맞는 라이브러리를 찾아 사용하시면 됩니다.

파일입출력-텍스트-CSV-JSON-바이너리-엑셀-YAML-PDF-이미지-SQLite..txt.txt
3.3 kB

Q5.나)
그외에 파일처리 라이브러리는 어디서 찾아 볼수 있나요?

A5.ssam)
파이썬에서 사용할 수 있는 다양한 파일 처리 라이브러리를 찾으려면 다음과 같은 방법을 사용할 수 있습니다:

  1. PyPI (Python Package Index): PyPI는 파이썬 패키지를 검색하고 설치할 수 있는 공식 저장소입니다. 웹사이트(https://pypi.org/)에서 검색 기능을 사용하거나, 관련 키워드를 입력해 필요한 라이브러리를 찾을 수 있습니다.
  2. GitHub: GitHub는 다양한 오픈 소스 프로젝트를 호스팅하는 플랫폼입니다. 필요한 라이브러리의 이름이나 관련 키워드를 검색하면, 해당 라이브러리의 소스 코드와 사용 방법, 예제 등을 찾을 수 있습니다.
  3. Google 검색: 필요한 라이브러리의 이름이나 관련 키워드와 함께 "Python"이라는 단어를 검색하면, 다양한 라이브러리와 관련 정보를 찾을 수 있습니다. 공식 문서, 블로그 포스트, 스택 오버플로우 등에서 사용법과 예제를 찾아볼 수 있습니다.
  4. 파이썬 커뮤니티: 파이썬 관련 포럼, 메일링 리스트, 슬랙, 디스코드 채널 등에서 다른 사용자와 질문을 공유하고, 추천할만한 라이브러리를 찾을 수 있습니다.
  5. Awesome Python: Awesome Python(https://awesome-python.com/)은 파이썬에서 사용할 수 있는 라이브러리와 프레임워크, 소프트웨어 등을 모아놓은 목록입니다. 여기서 다양한 카테고리별 라이브러리를 찾을 수 있습니다.

이러한 방법들을 통해 필요한 파일 처리 라이브러리를 찾고, 사용법과 예제를 익힐 수 있습니다. 이 외에도 인터넷에는 다양한 파이썬 라이브러리에 관한 정보와 튜토리얼, 데모 등이 있으므로 적극 활용해보시길 바랍니다.

Q6.나)
파일 입출력과 관련해서 추가로 더 알아야 할 사항이 있나요?

A6.ssam)
파일 입출력과 관련하여 추가로 알아두면 좋은 사항들은 다음과 같습니다:

1)에러 처리: 파일 입출력 과정에서 발생할 수 있는 예외를 처리하기 위해 try-except 구문을 사용합니다. 예를 들어, 파일을 여는 과정에서 파일이 존재하지 않거나 권한 문제가 발생할 수 있습니다.

try:
    with open("example.txt", "r") as file:
        content = file.read()
except FileNotFoundError:
    print("파일이 존재하지 않습니다.")
except PermissionError:
    print("파일을 열 권한이 없습니다.")
except Exception as e:
    print(f"파일을 여는 중에 에러가 발생했습니다: {e}")

2) 인코딩: 파이썬에서 파일을 읽고 쓸 때 인코딩 방식을 지정할 수 있습니다. 기본 인코딩은 시스템의 기본 설정에 따릅니다. 대부분의 경우 UTF-8 인코딩을 사용하는 것이 좋습니다.

with open("example.txt", "r", encoding="utf-8") as file:
    content = file.read()

3) 파일 위치 이동: seek() 함수를 사용하여 파일 포인터의 위치를 이동할 수 있습니다. 이를 사용하면 파일의 특정 위치에서 읽기/쓰기 작업을 수행할 수 있습니다.

with open("example.txt", "r") as file:
    file.seek(5)  # 파일 포인터를 5번째 바이트로 이동
    content = file.read()
    print(content)

4) 임시 파일: tempfile 모듈을 사용하여 임시 파일을 생성하고 작업할 수 있습니다. 이를 사용하면 디스크 공간을 절약하고, 빠르게 파일 작업을 수행할 수 있습니다.

import tempfile

with tempfile.TemporaryFile(mode="w+t") as temp_file:
    temp_file.write("임시 파일에 쓰기")
    temp_file.seek(0)  # 파일 포인터를 처음으로 돌리기
    content = temp_file.read()
    print(content)

5-1) 경로 처리: os 모듈과 os.path 모듈, pathlib 모듈을 사용하여 파일 경로를 처리할 수 있습니다. 이를 사용하면 플랫폼에 독립적으로 파일 경로를 다룰 수 있습니다.

import os
from pathlib import Path

current_dir = os.getcwd()  # 현재 작업 디렉터리
example_path = Path(current_dir) / "example.txt"  # 파일 경로 생성

with open(example_path, "r") as file:
    content = file.read()
    print(content)

5-2) 파일 시스템

import os

# 파일 경로 예제 코드
path = 'example.txt'
print(os.path.abspath(path))
print(os.path.dirname(path))
print(os.path.basename(path))
print(os.path.splitext(path))

# 디렉토리 예제 코드
dir_path = 'example_dir'
os.mkdir(dir_path)
os.chdir(dir_path)
print(os.getcwd())
os.chdir('..')
os.rmdir(dir_path)

6) 텍스트 파일과 이진 파일

# 텍스트 파일 사용 예제 코드
with open('example.txt', 'w') as f:
    # 파일에 문자열 쓰기
    f.write('Hello, World!')

with open('example.txt', 'r') as f:
    # 파일에서 문자열 읽기
    data = f.read()
    print(data)

# 이진 파일 사용 예제 코드
import struct

# 이진 파일 쓰기
with open('example.bin', 'wb') as f:
    data = struct.pack('iii', 1, 2, 3)
    f.write(data)

# 이진 파일 읽기
with open('example.bin', 'rb') as f:
    data = f.read()
    values = struct.unpack('iii', data)
    print(values)

이 외에도 파일 입출력과 관련한 다양한 라이브러리와 기능이 있습니다.

Last.ssam)
새로운 파일 형식을 만들지 않는 이상 파일입출력과 기본 처리는 이미 정해져 있습니다. 편하게 가져다 사용합시다. 아래는 질문 목록입니다.

  1. Q1) 파일 입출력의 개념과 사용법 에 대해서 설명해주세요
  2. Q2) with문을 사용하면 자동으로 닫는다는 말이 무슨 뜻인가요?
  3. Q3) 파일 읽기에서 내용을 파일 전체 내용을 문자열로 반환함 하면 메모리의 부담이 커지거나 그런거 아닌가요?
  4. Q4) 다양한 파일라이브러리
    ( 텍스트 / CSV / JSON / 바이너리 / 엑셀 / YAML / PDF / 이미지 / SQLite )기본 처리
  5. Q5) 그외에 파일처리 라이브러리는 어디서 찾아 볼수 있나요?
  6. Q6) 파일 입출력과 관련해서 추가로 더 알아야 할 사항이 있나요?
    ( 에러 / 인코딩 / 파일 위치 이동 / 임시 파일 / 경로 처리 / 파일 시스템)

같이 보면 좋은 포스팅들!

 

[파이썬 문법] 6. 클래스(class) 기초개념[클래스의 일생] - 질문으로 공부하기

오늘. ssam) 여기까지 왔네요. 모든 프로그래밍의 꽃이자, 포기의 분기점 바로 클래스 입니다. 시작해 봅시다!!! 화이팅 Q1. 나) 파이썬에서 클래스와 객체지향 프로그래밍에 대해서 설명해 주세요.

it-plus.tistory.com

 

[파이썬 문법] 7. 모듈vs패키지vs라이브러리(개념정리) - 질문으로 공부하기

Q1. 나) 모듈과 패키지, 그리고 라이브러리에 대해서 설명해 주세요 A1.ssam) 모듈(Module)과 패키지(Package)와 라이브러리(Library)는 파이썬에서 코드의 재사용성을 높이기 위한 기능입니다. 1)모듈(Modul

it-plus.tistory.com

댓글