기록하는 공부

[Python] 개인정보 마스킹 처리하기 본문

Language/Python

[Python] 개인정보 마스킹 처리하기

SS_StudySteadily 2023. 12. 12. 09:19
728x90
반응형

 

 

프리뷰

 

지난 포스팅에서 "Faker를 사용해 가상의 개인정보 파일 제작하기"를 진행했다.

이번 포스팅에서는 지난 포스팅에서 제작한 가상의 개인정보 파일에서 정규표현식을 활용해 전화번호 가운데 4자리, 이메일에서 아이디 부분을 마스킹 처리하는 코드를 작성해보려고 한다.

 

 

https://record-study-steadily.tistory.com/100

 

[Python] Faker를 사용해 가상의 개인정보 파일 제작하기

Faker Faker는 파이썬 라이브러리 중 하나로, 가짜 데이터를 생성하기 위한 도구로 사용된다. 예를 들어, 이름, 주소, 전화번호, 이메일과 같은 가짜 정보를 생성하거나, 테스트용 데이터를 만들 때

record-study-steadily.tistory.com

 

 

 

 

코드 작성

 

1. mask_list.py 파일을 생성한다.

 

 

 

2. 아래와 같이 코드를 작성한다.

 

  • 개인정보 파일의 경로를 지정한다.
  • 개인정보 파일을 엑셀파일 형태로 열어, 정규표현식을 사용해 패턴을 찾는다.
  • 반복문을 사용해 엑셀 시트와 각 셀을 순회하며 패턴을 찾는다.
  • 패턴이 발견되면 이름, 전화번호, 이메일 종류를 분류해 마스킹 처리를 진행한다.
  • 수정한 엑셀 파일을 새로운 이름의 엑셀 파일로 새로 저장한다.
  • 사용자에게 수정된 파일을 다운로드 형태로 전달한다.
from flask import Flask, send_file
import openpyxl
import re

app = Flask(__name__)

@app.route('/')
def list():
    file_path = "custom_File\customer_list.xlsx"
    workbook = openpyxl.load_workbook(file_path)
    
    #파일 내 중요 정보(전화번호 가운데 3, 4자리, 이메일) 정규표현식
    phone_number_pattern = r"\d{2,3}-\d{3,4}-\d{4}"      #전화번호 가운데 4자리 찾기
    email_pattern = "[\w\.-]+@[\w\.-]+"                 #이메일 찾기

    # 모든 시트 순회
    for sheet_name in workbook.sheetnames:
        sheet = workbook[sheet_name]

        # 각 셀 순회하며 중요정보 찾기
        for row in sheet.iter_rows():
            for cell in row:
                if cell.value:
                    # 셀의 값에서 중요정보 각 패턴 찾기
                    phone_number_in_cell = re.findall(phone_number_pattern, str(cell.value))
                    email_in_cell = re.findall(email_pattern, str(cell.value))

                    if cell.column == 1:  # 이름이 있는 열
                        name = cell.value
                        if len(name) > 1:  # 이름의 길이가 2자 이상인 경우 (성이 포함된 경우)
                            masked_name = name[0] + '*' * (len(name) - 1)  # 성을 제외한 나머지 부분을 마스킹 처리
                            cell.value = masked_name

                    if phone_number_in_cell:
                        # 전화번호 가운데 자릿수가 3자리, 4자리인 경우도 마스킹 처리
                        for phone_number in phone_number_in_cell:
                            split_phone_number = phone_number.split('-')
                            if len(split_phone_number[1]) == 3:
                                #전화번호 가운데 3자리 마스킹 처리
                                masked_phone_number = phone_number[:3] + "-***-" + phone_number[-4:]
                            else:
                                #전화번호 가운데 4자리 마스킹 처리
                                masked_phone_number = phone_number[:4] + "-****-" + phone_number[-4:]
                        cell.value = cell.value.replace(phone_number, masked_phone_number)
                    if email_in_cell:
                        for email in email_in_cell:
                            # 이메일을 마스킹 처리
                            masked_email = email[:4] + "*****" + email[email.index("@"):]
                            cell.value = cell.value.replace(email, masked_email)

    # 수정된 내용을 새로운 파일로 저장
    masked_file_path = "custom_File\masked_your_excel_file.xlsx"
    workbook.save(masked_file_path)
    
    # 클라이언트에게 다운로드할 파일을 응답으로 전달
    return send_file(masked_file_path, as_attachment=True)

if __name__ == '__main__':
    app.run(debug=True)

 

 

 

3. 이름, 전화번호 가운데 4자리, 이메일이 마스킹 처리된 것을 확인할 수 있다.

 

마스킹 처리 결과

 

 

 

728x90
반응형