반응형
Recent Posts
Recent Comments
관리 메뉴

개발잡부

[python] 데이터 검증 본문

Python

[python] 데이터 검증

닉의네임 2024. 9. 3. 14:53
반응형

쿼리 튜닝을 해서 배포를 했는데 데이터를 검증 해야한다.. 

근데 .. 양이 많네..

 

promoInfos 정보를 가져오는 부분이 쿼리가 튜닝 되었으니 해당 정보만 가져온다. 

{
  "track_total_hits": true,
  "size": 10000,
  "_source": [
    "itemNo",
    "itemStoreInfo.storeId",
    "promoInfos"
  ],
  "query": {
    "bool": {
      "must": [
        {
          "exists": {
            "field": "promoInfos"
          }
        },
        {
          "term": {
            "itemStoreInfo.storeId": {
              "value": "{store_id}"
            }
          }
        }
      ]
    }
  },
  "sort": [
    {
      "itemNo": {
        "order": "desc"
      }
    }
  ]
}



 

그리곤 파일로 떨군다. 

# -*- coding: utf-8 -*-

import json
import time
from datetime import datetime, timedelta
import urllib3
from elasticsearch import Elasticsearch

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

def start(i):
    with open(INDEX_FILE) as index_file:
        query = index_file.read().strip()
        query_r = query.replace("{store_id}", str(i))
        response = client.search(index=INDEX_NAME, body=query_r)

        for hit in response["hits"]["hits"]:
            print(hit["_source"]["itemNo"])
            print(hit["_source"]["itemStoreInfo"]["storeId"])
            print(hit["_source"]["promoInfos"])
            f_o.write(str(hit["_source"]["itemNo"]) + "," + str(hit["_source"]["itemStoreInfo"]["storeId"]) + "," + str(hit["_source"]["promoInfos"]) + "\n")


##### MAIN SCRIPT #####
if __name__ == '__main__':
    INDEX_NAME = "hyper-item"
    INDEX_FILE = "./sql/data_diff.json"

    client = Elasticsearch("https://elastic:co.kr:443/", ca_certs=False,
                           verify_certs=False)

    for i in range (1, 130):
        f_o = open("./data_new/origin_"+str(i)+".txt", 'w')
        start(i)
        f_o.close()
    print("Done.")

 

As-is 는 data 디렉토리에 To-be 는 data_new 디렉토리에 파일로 생성

 

떨군 파일을 비교해 보자


import json
import time
from time import sleep

from datetime import datetime, timedelta
import urllib3
import difflib
from difflib import unified_diff

from elasticsearch import Elasticsearch

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

def read_file(i):
    ori_file = './data/origin_' + str(i) + '.txt'
    new_file = './data_new/origin_' + str(i) + '.txt'

    with open(ori_file, 'r', encoding='utf-8') as file:
        # 파일을 한 줄씩 읽기
        for line in file:
            # 줄 끝의 개행 문자를 제거
            line = line.strip()

            with open(new_file, 'r', encoding='utf-8') as file_new:

                # 파일을 한 줄씩 읽기
                for line_new in file_new:
                    array_ori = line.strip().split(',')
                    if line_new.startswith(array_ori[0]):
                        check_point = 0
                        if  len(array_ori) > 1 :
                            promo_parts_ori = array_ori[2].split(" ")
                            array_ori[2] = promo_parts_ori
                        if isinstance(line_new, list):
                            line_new = line_new[0]
                        array_new = line_new.strip().split(',')
                        if len(array_ori) > 2 and len(array_new) > 2 :
                            if  len(array_new) > 1 :
                                promo_parts_new = array_new[2].split(" ")
                                array_new[2] = promo_parts_new

                            if array_ori[0] == array_new[0] and array_ori[1] == array_new[1]:
                                check_point = 0
                                if sorted(array_ori[2]) == sorted(array_new[2]):
                                    check_point = 0
                                    print("배열 일치")
                                else:
                                    check_point = 1
                            else:
                                check_point = 1
                        else:
                            check_point = 1
                        if check_point == 1:
                            f_o.write(f"[CHECK]{line}\n")

##### MAIN SCRIPT #####
if __name__ == '__main__':
    for i in range (11, 130):
        f_o = open("./confirm/diff_data_"+str(i)+".txt", 'w')
        read_file(i)
        f_o.close()
    print("Done.")

 

일치하지 않으면 파일로 떨구는데

파일 사이즈가 0 인거 보면 다른게 없는 듯.

반응형
Comments