2018년 11월 7일 수요일

Python module - CL tool #1



아직 python 답게 사용하지 못함...
익숙하지 못함...
코딩양도 적어 쉽게 익숙해지기 어려움...
그래도... 작은 툴이라도 서툴게 만들어 사용할 수 있으니 다행...


import re


def str2set(cls):

    CL = re.compile(r'\w+')

    clset = set()

    for match in CL.finditer(cls):

        cl = match.group()

        clset.add(cl)
    return clset

def set2str(clset):
    clstr = ''
    for cl in clset:
        clstr += str(cl)
        clstr += ','
    return clstr[:-1]

def check_cl(cl1, cl2):
    '''
    cl1 : ,로 구분된 cl list
    cl2 : ,로 구분된 cl list
    동작 : cl1의 각 cl을 확인하여 cl2에 포함되어 있지 않은 cl을 list up함.
           즉 cl1 - cl2
    return type : set
    '''
    CL = re.compile(r'\w+')
    cl1set = str2set(cl1)
    cl2set = str2set(cl2)
    return cl1set - cl2set


def make_cl(eur_cls, add_cls='', sub_cls=''):
    '''
    return type : set
    '''
    eurclset = str2set(eur_cls)
    addclset = str2set(add_cls)
    subclset = str2set(sub_cls)
    #
    for cl in addclset:
        eurclset.add(cl)
    result = eurclset - subclset
    #
    return result

def main():
    with open('cl_list.txt', 'rt') as f:
        for line in f:
            eur_partials = re.findall('^eur_partials\s*=\s*([\d,]*)', line)
            if eur_partials != []:
                break
        for line in f:
            kor_partials = re.findall('^kor_partials\s*=\s*([\d,]*)', line)
            if kor_partials != []:
                break
        for line in f:
            add_partials = re.findall('^add_partials\s*=\s*([\d,]*)', line)
            if add_partials != []:
                break
        for line in f:
            sub_partials = re.findall('^sub_partials\s*=\s*([\d,]*)', line)
            if sub_partials != []:
                break

        eurclset = str2set(eur_partials[0])
        korclset = str2set(kor_partials[0])
        addclset = str2set(add_partials[0])
        subclset = str2set(sub_partials[0])

        diff1 = eurclset - korclset - subclset
        diff2 = korclset - eurclset - subclset

        for cl in addclset:
            eurclset.add(cl)
        resultlist = list(eurclset - subclset)
        resultlist.sort()

        print('eur_partials = %s' % eur_partials[0])
        print("\n")

        print('kor_partials = %s' % kor_partials[0])
        print('\n')

        print('add_partials = %s' % add_partials[0])
        print('\n')

        print('sub_partials = %s' % sub_partials[0])

        print("------------------------------------------")

        print('1. EUR - KOR : ')
        print(set2str(diff1))
        print('\n')
        print('2. KOR - EUR : ')
        print(set2str(diff2))
        print('\n')
        print('3. New CL list   : ')
        print(str([int(x) for x in resultlist]).replace(', ',',')[1:-1])

if __name__ == '__main__':
    main()



아래는 위 내용으로 in/out을 복사하려니 그래서
사용하는 text file에 바로 output을 넣도록 바꾸었음.

오탈자가 나서 인식을 못해 add등이 안되도 알 수가 없어서
간단한 오류 검사도 추가함...

import re
from P4 import P4
CLLIST = 'cl_list.txt'
ENC = 'utf-8'
def p4con():
    p4 = P4()
    p4.user = 'chinst'
    p4.password = 'ckaRo$9697'
    p4.port = '165.213.202.46:1716'
    p4.client = 'KRSW_AND_CHINST_TRELTE_SERIES7'
    depot = '//PROD_PEACE/STAR_STAR2_CROWN/FLUMEN/...'
    p4.connect()
    return p4
def p4discon(p4):
    p4.disconnect()
def str2set(cls):
    CL = re.compile(r'\w+')
    clset = set()
    #
    for match in CL.finditer(cls):
        cl = match.group()
        clset.add(cl)
    return clset
#
def set2str(clset):
    clstr = ''
    for cl in clset:
        clstr += str(cl)
        clstr += ','
    return clstr[:-1]
#
def match_comment(line):
    temp = re.findall('^\s*#(.*)', line)
    if temp != []:
        return True
    return False
#
def matchcls(base, matchstr, line):
    match = False
    temp = re.findall('^\s*'+matchstr+'\s*=', line)
    if len(temp) > 0:
        match = True
    temp = re.findall('^\s*'+matchstr+'\s*=\s*([\d,\s]*)#{0,1}', line)
    if temp != []:
        if base != '':
            base += ','
        base += temp[0].replace(' ','').replace('\n','')
    return match, base
#
def getcls():
    e = k = a = s = m = orgstr = ''
    with open(CLLIST, mode='rt', encoding='utf-8') as f:
        #
        ln = 0
        while(1):
            line = f.readline()
            ln += 1
            orgstr += line
            if line == '' or line[:13] == '# end of data':
                break
            temp = []
            #
            temp = re.findall('\s*', line)
            if temp[0] == line:
                continue
            temp = re.findall('^base\s*=\s*([\d]+)', line)
            if temp != []:
                basecl = temp[0]
                continue
            # 
            match = mt = False
            mt, e = matchcls(e, 'ref_partials', line)
            match |= mt
            mt, k = matchcls(k, 'cur_partials', line)
            match |= mt
            mt, a = matchcls(a, 'add_partials', line)
            match |= mt
            mt, s = matchcls(s, 'sub_partials', line)
            match |= mt
            mt, m = matchcls(m, 'must_partials', line)
            match |= mt
            match |= match_comment(line)
            if match == False :
                print('Error in line #%d' % ln)
    return orgstr, basecl, e, k, a, s, m
#
def putcl(orgstr, diff1, diff2, basecl, newcllist, underlist):
    result_str = '------------------------------------------\n' +         \
    '1. REF - CUR : (refclset - curclset - subclset)\n' +                 \
    set2str(diff1) + '\n\n' +                                             \
    '2. CUR - REF : (curclset - refclset - addclset)\n' +                 \
    set2str(diff2) + '\n\n' +                                             \
    '3. New CL list\n\n' + 'Base : ' + str(basecl) + '\nPartial : \n' +   \
    str([int(x) for x in newcllist]).replace(', ',',')[1:-1] + '\n\n' +   \
    '***** CLs under the BASE CL *****\n' +                               \
    str([int(x) for x in underlist]).replace(', ',',')[1:-1] + '\n'      
    #
    with open(CLLIST, mode='wt+', encoding='utf-8') as f:
        f.write(orgstr)
        f.write(result_str)
#
def update():
    #
    orgstr = ''
    basecl = 0
    #
    orgstr, basecl, eur_partials, kor_partials, add_partials, sub_partials, must_partials = getcls()
    #
    eurclset = str2set(eur_partials)
    korclset = str2set(kor_partials)
    addclset = str2set(add_partials)
    subclset = str2set(sub_partials)
    mustset  = str2set(must_partials)
    #
    diff1 = eurclset - korclset - subclset
    diff2 = korclset - eurclset - addclset
    #
    korclset = korclset.union(eurclset)
    korclset = korclset.union(addclset)
    resultlist = list(korclset - subclset)
    mustlist = list(mustset)
    underlist = [ x for x in resultlist if int(x) < int(basecl) ]
    newcllist = [ x for x in resultlist if int(x) > int(basecl)]
    underlist.sort()
    newcllist.sort()
    mustlist.sort()
    for cl in mustlist:
        if cl not in newcllist:
            newcllist.append(cl)
    #
    putcl(orgstr, diff1, diff2, basecl, newcllist, underlist)
def main():
    update()
#
if __name__ == '__main__':
    main()

댓글 없음:

댓글 쓰기

200926.가오리코스 라이딩

9/26 골절인지 아닌지 확인 안됨. 이후 미세골절여부 확인 핸드폰을 드는 것도 어려움 9/29 x ray 다시 찍지 않고 이후 재 방문 요청 ...