240625 TIL #434 데이터 저장방식 in Python

김춘복·2024년 6월 24일
0

TIL : Today I Learned

목록 보기
434/543
post-custom-banner

Today I Learned

오늘은 여러 데이터 저장방식을 파이썬에서 다루는 법에 대해 공부했다.


데이터 저장방식

CSV

  • 필드를 쉼표(,)로 구분한 텍스트 파일

  • 엑셀 양식의 데이터를 프로그램에 상관없이 쓰기 위한 데이터 형식

  • 탭(TSV), 빈칸(SSV) 등으로 구분해서 쓰기도 하며, 통칭으로 CSV라 한다.

  • 일반적인 text 파일을 처리하듯이 파일을 읽어와서 한줄씩 데이터를 처리한다.

  • csv 모듈을 사용해서 csv.reader로 객체를 이용해서 읽어오면 편하다.

사용 예시

import csv
import os

# 파일 읽기
file_path = os.path.join('datahandling', 'customers.csv')

data_header = []
customer_list = []

with open(file_path, 'r', newline='') as customer_data:
    reader = csv.reader(customer_data)
    line_counter = 0
    for row in reader:
        if line_counter == 0:
            data_header = row
        else:
            customer_list.append(row)
        line_counter += 1

print("Header:\t", data_header)
for i in range(min(10, len(customer_list))):
    print(f"Data {i}:\t", customer_list[i])
print("Total customers:", len(customer_list))

# 파일 쓰기
file_path = os.path.join('datahandling', 'customers.csv')
output_file_path = "customers_USA_only.csv"

data_header = []
customer_USA_only_list = []

with open(file_path, 'r', newline='') as customer_data:
    reader = csv.reader(customer_data)
    data_header = next(reader)  # 첫 번째 행을 헤더로 설정

    for row in reader:
        if row[10].upper() == "USA":
            customer_USA_only_list.append(row)

print("Header:\t", data_header)
for i in range(min(10, len(customer_USA_only_list))):
    print(f"Data:\t", customer_USA_only_list[i])
print("Total customers in USA:", len(customer_USA_only_list))

with open(output_file_path, 'w', newline='') as customers_USA_only_csv:
    writer = csv.writer(customers_USA_only_csv)
    writer.writerow(data_header)
    for customer in customer_USA_only_list:
        writer.writerow(customer)

print(f"Data written to {output_file_path}")

Web

  • WWW(World Wide Web), 줄여서 Web이라 한다.

  • 데이터 송수신에 HTTP 프로토콜을 사용하고 데이터를 표시하기 위해 HTML 형식을 사용한다.

  • HTML은 요소 표시를 위해 Tag를 사용하고, 모든 요소는 <title>제목</title> 같이 태그 안에 둘러쌓여 있다.

  • 일반적으로 웹페이지의 HTML 소스파일은 컴퓨터가 다운받아 웹 브라우저가 해석해 화면에 나타낸다.

  • html에서 특정한 요소들을 파싱하기 위해선 문자열로 변환해 정규식을 이용해서 원하는 데이터를 추출할 수 있다.


XML

  • 데이터의 구조와 의미를 설명하는 TAG(markup)를 사용해 표시하는 언어

  • 태그와 태그 사이에 값이 표시되고 구조적 정보를 표현할 수 있다.

  • HTML과 유사하며 컴퓨터간 정보를 주고받기 매우 유용하다.

  • XML도 정규식으로 파싱이 가능하고, 파이썬에선 beautifulsoup으로 파싱이 가능하다.

BeautifulSoup

  • HTML, XML등 Markup 언어 스크래핑을 위한 도구

  • 속도는 상대적으로 느리지만 간단하게 사용할 수 있다.

  • 사용 예시

from bs4 import BeautifulSoup

with open("books.xml", "r", encoding="utf8") as book_file:
  books_xml = book_file.read()

soup = BeautifulSoup(books_xml, "lxml")

for book_info in soup.find_all("author"):
  print(book_info)
  print(book_info.get_text())

JSON

  • JavaScript의 데이터 객체 표현 방식. 웹의 API는 대부분 json을 사용한다.

  • 간결해서 기계와 인간 모두 이해하기 편해 XML의 대체제로 활용된다.
    python의 dict와 유사하게 key:value로 되어있다.

  • json 모듈을 이용해서 손쉽게 파싱이 가능하다.

  • 저장과 읽기는 dict type과 상호호환이 가능하다.

  • 사용 예시

import json

# json 읽기
with open("json_example.json", "r", encoding="utf8") as f:
  contents = f.read()
  json_data = json.load(contents)
  print(json_data["employees"])

# json 쓰기
dict_data = {'Name' : 'Kim', 'Age' : 18, 'Class' : 'Magician'}
with open("data.json", "w") as f:
  json.dump(dict_data, f)
profile
Backend Dev / Data Engineer
post-custom-banner

0개의 댓글