오늘은 여러 데이터 저장방식을 파이썬에서 다루는 법에 대해 공부했다.
필드를 쉼표(,)로 구분한 텍스트 파일
엑셀 양식의 데이터를 프로그램에 상관없이 쓰기 위한 데이터 형식
탭(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}")
WWW(World Wide Web), 줄여서 Web이라 한다.
데이터 송수신에 HTTP 프로토콜을 사용하고 데이터를 표시하기 위해 HTML 형식을 사용한다.
HTML은 요소 표시를 위해 Tag를 사용하고, 모든 요소는 <title>제목</title> 같이 태그 안에 둘러쌓여 있다.
일반적으로 웹페이지의 HTML 소스파일은 컴퓨터가 다운받아 웹 브라우저가 해석해 화면에 나타낸다.
html에서 특정한 요소들을 파싱하기 위해선 문자열로 변환해 정규식을 이용해서 원하는 데이터를 추출할 수 있다.
데이터의 구조와 의미를 설명하는 TAG(markup)를 사용해 표시하는 언어
태그와 태그 사이에 값이 표시되고 구조적 정보를 표현할 수 있다.
HTML과 유사하며 컴퓨터간 정보를 주고받기 매우 유용하다.
XML도 정규식으로 파싱이 가능하고, 파이썬에선 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())
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)