[Python] 데이터 가공 따라하기(정규식,json,datetime)

Python의 re, datetime, json 모듈을 활용하여 데이터를 효과적으로 가공하고 처리할 수 있다



정규식(re) 활용 📝

기본 패턴

import re

# 패턴 정의
p = re.compile("ca.e")  # 패턴 객체 생성

# 주요 메서드 사용
m = p.match("careless")
print(m)
    
# 출력 예시: 
<re.Match object; span=(0, 4), match='care'>


주요 메서드

  • match(): 문자열 처음부터 패턴 매칭
  • search(): 문자열 전체에서 패턴 매칭
  • findall(): 모든 매칭을 리스트로 반환 -> ex: [‘care’, ‘cafe’]


패턴 문자

  • .: 하나의 문자 매칭 (예: ca.e → care, cafe)
  • ^: 문자열 시작 (예: ^de → desk)
  • $: 문자열 끝 (예: se$ → case)


매치 객체 메서드

def print_match(m):
    if m:
        print("m.group():", m.group())  # 매칭된 문자열
        print("m.string:", m.string)    # 입력 문자열
        print("m.start():", m.start())  # 매칭 시작 위치
        print("m.end():", m.end())      # 매칭 끝 위치
        print("m.span():", m.span())    # (시작, 끝) 튜플


응용: 공백 없애기

cal_Date = re.sub(r'\\s+', '', cal_Date) # 중간의 '' 는 공백을 의미
print(cal_Date)



datetime?

기본 사용법

  • 형식은 %Y-%m-%d 말고도 많음! 대문자인지 소문자인지에 따라 또 다른 점이 있음. 궁금한 사람은 따로 찾아보기.
  • datetime → string 의 경우 str ‘f’ time, string → datetime의 경우 str ‘p’ time임에 유의하기.
from datetime import datetime
# 'datetime 모듈을 datetime이라는 이름으로 사용하겠다.'

# 지금 현재 날짜와 시간 가져오기
now = datetime.now()
print(now)

# 문자열 변환
str_date = now.strftime('%Y-%m-%d')  # datetime → 문자열
date_obj = datetime.strptime(str_date, '%Y-%m-%d')  # 문자열 → datetime


응용: 날짜 형식 변환

# 한자리 월/일을 두자리로 변환 (2 → 02)
# string → datetime → string 로 두자리 변환 하는 원리
cal_First_Datetime = datetime.strptime(cal_First_Text, '%Y-%m-%d')
cal_First_Text = cal_First_Datetime.strftime('%Y-%m-%d')

# 요일 처리
week = ['(월)', '(화)', '(수)', '(목)', '(금)', '(토)', '(일)']
weekday = cal_First_Datetime.weekday()  # 0(월) ~ 6(일)
cal_First_Text += week[weekday]



JSON

기본 설정

import json
print("Content-type:application/json;charset=utf-8\r\n")


데이터 처리

# JSON 데이터 준비
json_Notice = []  # 최종 출력용
json_Notice_Temp = []  # 임시 저장용

# 페이지별 데이터 처리
for page in range(1,4): # 1~3 페이지 처리
    if page == 1:
        for i in notice[0:29]: # 첫 페이지 29개 항목 처리
            json_Notice_Temp.append({
                'id': i['notice_No'],
                'title': i['notice_Title'],
                '게시자': i['notice_Writer'],
                '작성일': i['notice_Day'],
                '조회': i['notice_Lookup'],
                'address': i['notice_link']
            })
    
    # 페이지 데이터 저장
    json_Notice.append({page: json_Notice_Temp})
    json_Notice_Temp = []  # 다음 페이지를 위한 초기화

# JSON 변환 및 출력
json_Notice = json.dumps(json_Notice, indent=4, ensure_ascii=False) # indent:들여쓰기 4칸
print(json_Notice)


결과 구조 json

[
    {
        "1": [
            {
                "id": "notice_1",
                "title": "첫번째 공지",
                "게시자": "관리자",
                "작성일": "2024-01-03",
                "조회": "100",
                "address": "http://..."
            },
            // ... 추가 항목들
        ]
    },
    // 페이지 2, 3 동일한 구조
]

댓글남기기