질문과답변 월간 최다채택 우수답변회원

  • 허밍타임2 채택답변수 (83)
  • 금기자 채택답변수 (12)
  • 5180 채택답변수 (12)
  • 나도익명 채택답변수 (11)
  • 곰나라탱 채택답변수 (10)
  • i5pi5p 채택답변수 (7)
  • 아톰 채택답변수 (5)
  • 잊혀진기억 채택답변수 (5)
  • 최대8자 채택답변수 (5)
       
    [컴퓨터/인터넷]

    파이썬 조건문 질문입니다.

    글쓴이 : 어진돌 날짜 : 2019-06-16 (일) 13:30 조회 : 212
    대량 반복 작업을 한 동안 해야할 일이 있어서 이걸 어떻게 해야하나 찾아보다가

    파이썬을 알게 되었고, 해본 적도 없는 코딩을 하고 있습니다.

    하려는 작업은 비교적 간단합니다.

    웹에서 어떤 데이터를 받아와서 엑셀에 저장하고 기존에 있는 데이터와 비교하여 동일한지 여부만 파악하면 되는 작업입니다.

    현재 데이터를 받아와 엑셀에 데이터를 전달하는 것까지는 이상이 없습니다.

    막히는 부분은 엑셀에서 기존 데이터와의 비교 상황에서 발생합니다.



    코드를 설명드리겠습니다.

    현재 soso, dodo 라는 이름을 가진 두 개의 엑셀시트가 있습니다.

    soso시트는 데이터를 받아 저장하고 비교하는 시트이고
    dodo시트는 데이터 비교시 불일치 이벤트가 발생할 때, 이를 기록하는 시트입니다.

    bf는 이전 데이터의 셀 좌표이고
    af는 현재 데이터의 셀 좌표입니다.

    1. bf에 값이 존재하는지 여부를 확인하고 값이 없으면 bf에 받아온 데이터 'lis[3]' 을 저장하고 끝납니다.
    2. bf에 값이 존재하고 af에 값이 존재하지 않으면 af에 데이터 'lis[3]' 을 저장하고 bf값과 비교하여 불일치시 dodo시트의 빈 셀에 데이터를 전달합니다.
    3. bf, af에 모두 값이 존재할 때, af열의 데이터(헤더를 제외한)를 bf열로 옮기고, af에 데이터 'lis[3]'를 저장한 후, bf와 af를 비교하여 불일치시 dodo시트의 빈 셀에 데이터를 전달합니다.

    1과 2번 상황은 아무 이상 없이 작동합니다.
    반면 3번처럼 bf, af에 모두 값이 존재할 때, af 열의 데이터가 bf열로 이동은 하는데 그 후, 데이터 'lis[3]'를 af에 저장하는 것이 아니라 bf에 저장합니다. 그래서 af에는 아무런 데이터가 없는 상태가 됩니다.

    제가 봤을 땐 분명 af 열의 데이터를 bf열로 이동 후, af열에 데이터를 저장해야 되는 코드인데 이게 왜 이렇게 되는지 도저히 문제점을 찾지 못하겠습니다.

    프로그래밍이란 걸 생판 모르는 상태에서 필요한 부분을 검색해서 그 때 그 때 끼워맞추면서 작성해왔는데 한계에 봉착했습니다.

    어제도 for문 안에 있는 if문에 굳이 else를 넣지 않아도 되는 상황에서 else : continue를 넣어서 1씩 증가하는 변수가 작동을 안 했는데,
    그 간단한 걸 몰라서 몇 시간을 헤맸었는데 지금도 딱 그런 상황인 거 같습니다.

    살짝만 바꾸면 되는 문제 같은데 도저히 모르겠어서 질문드려봅니다.

    질문의 요지 : bf, af에 모두 값이 존재할 때, af열의 데이터(헤더를 제외한)를 bf열로 옮기고, af에 데이터 'lis[3]'를 저장한 후, bf와 af를 비교하여 불일치시 dodo시트의 빈 셀에 데이터를 전달하는 기능을 구현하고 싶습니다. 어느 부분을 어떻게 수정해야 하는지 알고 싶습니다.

    도움 부탁 드립니다. 감사합니다.




    다음은 코드입니다. (전체 코드에서 데이터 저장 및 비교 부분 함수만 추출했습니다.)



    count = 1

    bf = soso.cell(count+1, 2)
    af = soso.cell(count+1, 3)



    if af.value != None and bf.value != None :
        soso.move_range("C2:C1000", rows=0, cols=-1)
        af.value = lis[3]
        if bf.value != af.value:
            rw = 1
            while dodo.cell(rw, 1).value != None :
                rw += 1

            dodo.cell(rw, 1).value = lis[0]
            dodo.cell(rw, 2).value = lis[3]

    elif bf.value != None and af.value == None :
        af.value = lis[3]
        if bf.value != af.value:
            rw = 1
            while dodo.cell(rw, 1).value != None :
                rw += 1

            dodo.cell(rw, 1).value = lis[0]
            dodo.cell(rw, 2).value = lis[3]

    else:
        soso.cell(count+1, 2).value = lis[3]

    notebook.save('appending.xlsx')
    요청자가 자신의 1000포인트를 걸었습니다. 답변이 채택되면 500포인트를 드립니다.

    네미시스 2019-06-16 (일) 16:49
    lis[3]이 뭔가요?

    언제 계산되는지, 참조값인지 함수인지 절대값인지 모르겠지만

    노란색 치신 저 두줄 순서를 위아래로 바꿔보시거나,

     soso.move_range 이전에 lis 3을 다른 변수에 넣어놓은 후 해보세요.
         
           
    글쓴이 2019-06-16 (일) 19:34
    lis[3] 은 웹에서 수집한 데이터를 리스트형 자료로 가공한 것의 4번째 인덱싱 데이터를 의미합니다.
    조건문 동작에는 영향을 미치는 변수가 아니라 설명을 드리지 않았습니다.

    기존 데이터를 옮겨놓고 그 자리에 새로 받은 데이터를 입력하고자 하는 목적이라 말씀해주신 답변에는 맞지 않는 거 같습니다.

    다른 분들 답변 받아볼 수 있게끔 이틀 후에 답변 채택 해드리려는 점 양해 부탁 드립니다.

    시간내서 답글 달아주셔서 감사합니다.
    lemo 2019-06-16 (일) 17:11
    import copy

    A = [ ... ]
    B = [ ... ]

    A2 = copy.deepcopy(A)
    B2 = copy.deepcopy(B)
    C2 = copy.deepcopy(A)

    for i in B:
        try:
            A2.remove(i)
        except:
            pass

    for i in A:
        try:
            B2.remove(i)
        except:
            pass

    for i in A2:
        C2.remove(i)

    하면

    A2, B2 에는 차이점만 남고

    C2 에는 중복값이 남습니다.

    A, B 에 엑셀에 있는 데이터 집어넣어서 사용하세요.
         
           
    글쓴이 2019-06-16 (일) 20:21
    웹에서 비교하고자 하는 데이터를 하루 한 번씩 세 번 받았다고 치고 이를 A, B, C라고 치면.
    1. 먼저 첫째날은 데이터 A를 기록하고 끝내고
    2. 둘째날은 A와 새로 받은 데이터 B를 매칭하여 다른 값을 찾고 기록
    3. A를 삭제하고 A 자리에 B를 이동시킨 후 B자리에 C를 입력하고 매칭 및 다른 값 찾아 기록

    이런 식으로 돌아가는 자동화 작업을 구현하고자 합니다.

    달아주신 내용과는 차이점이 있어서 제가 쓰기에는 어려울 거 같습니다.

    다른 분들 답변 받아볼 수 있게끔 이틀 후에 답변 채택 해드리려는 점 양해 부탁 드립니다.

    시간내서 답글 달아주셔서 감사합니다.
              
                
    lemo 2019-06-16 (일) 21:10
    엑셀 파일 이름을 날짜로 저장하고 맨 뒤에서 엑셀 파일 2개만 추출해서 사용하세요.

    원본 데이터 삭제하지 않고 남겨두면 나중에 필요할 때 다시 추출할 수 있습니다.
                   
                     
    글쓴이 2019-06-16 (일) 21:20
    답글 다는 도중에 새로 작성해주셨네요.
    덕분에 제 댓글이 날아갔습...

    엑셀파일 하나에 두 열에만 데이터가 계속해서 갱신되도록 하려고 하였는데 잘 안 되네요.
    결국 기존 데이터의 다음 열에 계속해서 새로운 데이터를 기록하는 방식으로 바꾸었습니다.

    소중한 시간 할애해 추가답변까지 달아주셔서 감사합니다.

    좋은 밤 되세요.
                        
                          
    lemo 2019-06-16 (일) 21:34
    차이점만 추가로 기재하려면

    기록된 마지막 위치를 알아내야 하는데 그걸 못하시겠으면

    엑셀 파일의 데이터를 전부 메모리로 가져온 후에

    그 끝부분에 새로운 차이점을 추가하고

    새로 저장하세요.

    새로 저장할 때 기존 엑셀파일을 덮어써도 되지만

    파일 이름을 저장시간으로 해놓으면 불의의 사고를 방지할 수 있을 겁니다.
                        
                          
    lemo 2019-06-16 (일) 21:58
    아니면 데이터 추가할 때 데이터가 저장된 마지막 행의 다음 행에 특정 문자열 집어넣어서 저장하면

    다음번에 그 위치를 찾기가 더 쉬울 겁니다.
       

    지식iN  주간조회순 | 월간조회순 | 반기조회순 질문상태  |   | 
     
    번호 제목 글쓴이 상태 포인트 날짜 조회
    [공지]  ※ 지식iN 게시판 이용안내 eToLAND
    0 03-28
    [공지]  ※ 토렌트사이트질문,저작권 자료요청 금지 eToLAND
    0 08-25
    117370 [취미/생활]  프린터, 본체 버리려는데 (2) dk26kj
    300 01:17 93
    117369 [음악]  mp3 파일 소리를 증폭하고 싶은데요.. (벨소리가 작아서요) (3) 홍이요
    500 07-15 135
    117368 [기타]  확정일자 받는 기간? (4) 지상의별처럼
    400 07-15 99
    117367 [컴퓨터/인터넷]  윈도우10에서 Microsoft Office 설치가 안됩니다. (3) 스샷첨부 아줌마가대왕
    300 07-15 114
    117366 [기타]  편의점 관련되서 묘한 예기를 들었는데... (4) 나루터지기
    1000 07-15 364
    117365 [컴퓨터/인터넷]  dodi,fitgirl 등 설치오류 해결방법 좀 부탁드려요 (3) 30317
    1000 07-15 56
    117364 [취미/생활]  친한 동생이 여자친구와의 관계 때문에 고민입니다. (11) reSEE
    300 07-15 425
    117363 [TV/영상]  아이돌룸에 나왔던 음악을 찾습니다 TWICES2
    700 07-15 97
    117362 [쇼핑]  샌들 추천 해주세요~ (2) 토렌트신봉
    500 07-15 52
    117361 [TV/영상]  예전에 본 짤인데 이름이 기억 안나요... (2) 스샷첨부 여자와아이는…
    500 07-15 119
    117360 [전자기기]  스마트폰 기기변경에 대해 질문드립니다. jhp0905
    300 07-15 68
    117359 [전자기기]  ICD-TX650녹음기 및 모니터링 이어폰 스샷첨부 10X10
    300 07-15 69
    117358 [취미/생활]  이런 모양의 경첩이랑 나사 어디 구할 수 있을까요? (4) 스샷첨부 태서당김실장
    1000 07-15 182
    117357 [컴퓨터/인터넷]  프로그램 문의드립니다. (3) 뽀드득뽀드득
    500 07-15 110
    117356 [컴퓨터/인터넷]  pc가 켜지기는 하는데 모니터가 아무것도 인식을 못합니다. (5) Supiegel
    300 07-15 114
    117355 [쇼핑]  혹시 마장동 축산물시장에서 돼지고기 삼겹살이나 목삼겹 저렴하게 사는방법 아시는분있나요? (5) 기똥찬열정
    300 07-15 378
    117354 [컴퓨터/인터넷]  유토렌트 2.2.1버전 MAC용 어디서 다운받죠? (1) 깔끔하게두잔
    500 07-15 93
    117353 [건강/의학]  뮤즐리나 오트밀 얼마나 맛없나요? (8) 몸근영
    300 07-14 158
    117352 [취미/생활]  남자 헤어스타일 질문 입니다 (9) 스샷첨부 아니이런걸다
    500 07-14 254
    117351 [쇼핑]  약국에서 산 물품 환불하려면? (1) 그리마
    300 07-14 147
    117350 [TV/영상]  경리 이거 무슨 짤인가요? (2) 스샷첨부 몸근영
    300 07-14 435
    117349 [게임]  월광보합사려고하는데 (1) 흐하흐하하
    500 07-14 223
    117348 [컴퓨터/인터넷]  혹시 자기가 얼마쓴지 나오는 홈페이지 아시는분 ? (5) 갓유리
    3506 07-14 202
    117347 [컴퓨터/인터넷]  이거 좀 차단할 수 없을까요? (7) 스샷첨부 카본스틸맨
    300 07-14 188
    117346 [기타]  장애인 연금 관련해서 질문합니다. (2) 지상의별처럼
    400 07-14 89
    117345 [취미/생활]  블루투스 헤드폰 추천부탁드립니다. (2) 연못구름
    1000 07-14 175
    117344 [기타]  차량계기판 총주행거리 등등 정보에 대해 아시는분 (3) 스샷첨부 위험한관계
    1000 07-14 176
    117343 [취미/생활]  창문깨짐 수리비용 얼마정도나올까요 ㅜ (6) 스샷첨부 EuBnae
    526 07-14 293
    117342 [전자기기]  구형 산타페 aux생성할 수 있나요? (2) 스샷첨부 레드레오
    500 07-14 161
    117341 [TV/영상]  한국영화인데 제목을 모르겠네요. (2) 으뜸회오리
    500 07-14 207

     1  2  3  4  5  6  7  8  9  10  다음