지식iN

↑맨위로 ↓맨아래

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

  • 허밍타임2 채택답변수 (73)
  • 금기자 채택답변수 (26)
  • 제천대성 채택답변수 (24)
  • 페이마임 채택답변수 (13)
  • 나도익명 채택답변수 (10)
  • lemo 채택답변수 (9)
  • donn 채택답변수 (6)
  • 이미지뽕 채택답변수 (5)
  • 곰나라탱 채택답변수 (5)
       
    [컴퓨터/인터넷]

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

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

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

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

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

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

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



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

    현재 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포인트를 드립니다.
    어진돌님이 작성하신 다른 글
     [eTo마켓] [모락 슬릭 자동카드지갑] 레버를 당기면 카드가 팝업되는! (27) 

    네미시스 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
    118823 [컴퓨터/인터넷]  하드 디스크 인식 문제 (1) 참이슬클래식
    500 11:28 24
    118822 [컴퓨터/인터넷]  한글 문서작성 저장 오류 (3) 암울한현실
    500 11:02 48
    118821 [컴퓨터/인터넷]  토렌트 사용시 스트리밍 끊김 문의 (2) 벌이
    300 10:45 50
    118820 [컴퓨터/인터넷]  영상을 45도 기울어진 축을 기준으로 복사시키는 프로그램이 있을까요? 스샷첨부 kburo
    300 10:04 80
    118819 [취미/생활]  자동차라디에이터 콘덴서 공지사항
    1000 09:05 76
    118818 [컴퓨터/인터넷]  블루스크린 문제. (8) 카오스솔져
    300 10-16 254
    118817 [취미/생활]  부동산 알못인데 공무원임대아파트 관련 하나 여쭈고자 합니다. (3) 아라리가났네
    300 10-16 157
    118816 [컴퓨터/인터넷]  HDD 제품 괜찮은지좀 봐주세요.. (3) 가나다크뱌
    1000 10-16 83
    118815 [기타]  서버 OP 관제 업무 하시는분~ 업무 스케줄 이게 어느정도 정상적인건가요? (3) 간담z
    300 10-16 61
    118814 [컴퓨터/인터넷]  오페라 브라우저 - 토렌트 마그넷 링크 복구 관련 (5) 피터입니다
    2000 10-16 73
    118813 [쇼핑]  에스프레소용 커피글라인더 추천해주세요 (11) 얄리얄리얄랑…
    2000 10-16 228
    118812 [기타]  이사준비하려고하는데 박스 어디서 구할데 있나요?? (6) 엄지엄지척
    300 10-16 207
    118811 [쇼핑]  많은 수의 의자가 전시된 체험할 수 있는 곳 (4) 오일메이커
    3000 10-16 170
    118810 [컴퓨터/인터넷]  키보드 마우스 멈춤현상 발생합니다.. (5) 도털모
    1000 10-16 188
    118809 [컴퓨터/인터넷]  크롬,웨일 작업표시줄에서 우클릭 시 시크릿모드가 업습니다 (1) 스샷첨부 부와명예
    1000 10-16 86
    118808 [컴퓨터/인터넷]  컴퓨터가 이유없이 꺼집니다 ㅠㅠ (8) 토기토기
    500 10-15 203
    118807 [쇼핑]  이런 츄리닝 바지 사려면 뭐라고 쳐야 하나요? (6) 스샷첨부 몸근영
    300 10-15 313
    118806 [컴퓨터/인터넷]  부팅시 사운드 5번 발생 (10) 타락한휴지
    300 10-15 159
    118805 [경제/재테크]  IBK재형저축(3년고정금리형) 이자문의드립니다. (1) TheMaRin
    300 10-15 107
    118804 [기타]  원룸 출입문에 횡당보로 표시선(?)이 있던데 어떤 의미인가요?? (2) 비버u
    1500 10-15 194
    118803 [컴퓨터/인터넷]  여기 들어가셔서 캡쳐해 주실 분 계신가요 (1) 스샷첨부 탐색
    500 10-15 142
    118802 [취미/생활]  지하철 탈때요 (1) 아담존슨
    400 10-15 153
    118801 [컴퓨터/인터넷]  ASRock B150M PRO4 전원을 꺼도 마우스와스피커가 켜져있습니다.ㅜㅜ (2) eunseo아빠
    1000 10-15 126
    118800 [건강/의학]  치킨 먹고 새벽에 기절한 적이 있습니다. (5) airjorda
    300 10-15 321
    118799 [경제/재테크]  부동산 매매 중도금 치르는데 집문서랑 전세계약서를 찾을 수 없습니다. (2) 상향이동
    339 10-15 138
    118798 [컴퓨터/인터넷]  acrobat 페이지 삽입에서 (1) 리리2
    1000 10-15 106
    118797 [기타]  모자 브랜드를 찾고있습니다 스샷첨부 구선영
    300 10-15 110
    118796 [교육/학문]  Life is mine 말 되나요? (1) beeing
    300 10-15 119
    118795 [컴퓨터/인터넷]  오디오 mp4a 코덱 질문 (2) 스샷첨부 묘이
    300 10-15 86
    118794 [컴퓨터/인터넷]  마우스가 클릭이 안먹힙니다 (5) 신난다요
    5000 10-15 128

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