전체 글 33

여러개의 CSV 파일을 하나로 병합할 때

여러개의 CSV 파일을 손쉽게 하나로 병합하는 코드를 소개해 드립니다. 각각의 CSV 파일에 일자별 데이터가 있다고 할 때, 1주일 또는 한달치 데이터를 분석하고 싶다면 개별 파일을 열어서 파일을 복사-붙여넣기의 방법으로 병합해야 하는 번거로움이 생깁니다. 이를 파이썬 코드를 활용하여 파일 선택창을 열고, 해당 폴더에 있는 파일중 하나를 선택하면 병합을 진행하는 코드입니다.import pandas as pdimport tkinter as tkfrom tkinter import filedialogimport globimport os# tkinter 객체 생성 및 숨김root = tk.Tk()root.withdraw()# 파일 선택 창을 열어 경로 저장file_path = filedialog.askopenf..

개별 폴더에 있는 파일을 사용자가 지정한 경로로 한번에 이동하고 싶을 때

일자별 데이터 분석을 위해 데이터 파일을 받았는데 아래와 같이 개별 폴더에 파일이 각각 있는 경우가 있으셨나요? 한달치 일별 데이터를 CSV(Comma Seperated Value) 파일로 받아서 CSV 파일을 하나로 병합 후, 데이터 분석을 하려고 하는데 CSV 파일을 폴더 하나하나에서 꺼내서 이동하는 과정이 상당히 번거롭더군요. 위와 같은 문제를 Python으로 해결할 수 있는 간단한 코드를 소개합니다. D:\merge 경로 아래 일자별 폴더내에 있는 개별 파일을 D:\merge 폴더로 모두 꺼내주는 코드 입니다.import osimport shutil# 상위 폴더 경로 설정base_folder = r"D:\merge"# 하위 폴더 내 파일을 한 단계 상위 폴더로 이동for root, dirs, fi..

VBA Code: 엑셀 시트를 이름 순으로 정렬(오름차순/내림차순)

여러분은 업무 내용중 핵심내용이나 기억해야할 내용을 기록할 때 어떤 도구를 사용하시나요? 동기화를 지원하는 Web 기반 여러가지 좋은 도구들이 참 많이 있지만 사내 보안상 이곳도 저곳도 업로드 Traffice이 막힌 경우는 결국 동기화는 포기하고 원노트나 엑셀에 기록하는 수밖에 없죠... 저도 사내 정책상 어쩔수 없이 (동기화도 안되는)원노트에 대부분의 업무 주요 내용을 통합하는데, 원노트는 아직도 검색 기능이 부실한 관계로 정말 중요한 자료(빨리 검색해야 하는)와 숫자를 다루는 데이터는 결국 엑셀로 모일수 밖에 없는 것이 현실인것 같습니다. 엑셀에 이런저런 주요 요약 내용을 추가하다보니 시트는 점점 늘어나고 어느날 부턴가 세로 스크롤 만큼 가로 스크롤도 많이 하게 되더군요^^; 시트가 많아지면 시트간 ..

KUKA KRL 문법: Program 실행 흐름 제어 011 - WAIT SEC

KRL에서 WAIT SEC 키워드는 프로그램 실행을 사용자가 지정하는 만큼 중지하는 명령입니다. 사용방법은 무척 간단한데요, WAIT SEC 뒤에 프로그램 실행을 중지하기 원하는 시간을 초단위로 입력하면 됩니다. 정수형 숫자를 입력해서 1초를 대기하는 예제 입니다. WAIT SEC 1 실제 산업용 프로그램에서는 Cycle Time 단축을 위해서 0.1초 단위 이하로 대기시간을 거는 경우도 많습니다. 아래 예제는 12.34초를 대기하는 예제입니다. WAIT SEC 12.34 대기하는 시간이 수시로 변하여서 프로그램상 변수로 만들고 싶다면, 변수에 원하는 시간을 대입한 후 WAIT SEC 뒤에 위치시키면 됩니다. waittime=100 WAIT SEC waittime 감사합니다.

KUKA KRL 문법: Program 실행 흐름 제어 010 - WAIT FOR

KRL에서 WAIT FOR 키워드는 프로그램이 특정 조건을 만족할 때까지 "무기한 대기"하는 명령입니다. 주로 PLC에서 신호를 대기할 때 사용되는데, 아래 예시를 보겠습니다. PLC로 부터 17번 디지털 입력 신호를 기다릴 때까지 프로그램을 중지하는 예제 입니다. WAIT FOR $IN[17] 그렇다면 WAIT FOR 다음에 만족할 수 없는 조건을 입력하면 어떻게 될까요? 아래 코드는 FALSE라는 조건을 기다리는 다소 엉뚱한 예제입니다. 아래와 같이 코딩하면 로봇은 영원히 정지상태로 있게 됩니다. WAIT FOR FALSE 실제 프로그램에서 예를 들어보겠습니다. 언뜻 보기에 아무 문제가 없어 보이는 코드이지만, 100번 디지털 입력 신호는 PLC와 약속이 되어 있지 않다면 아래 코드는 로봇을 무기한 ..

KUKA KRL 문법: Program 실행 흐름 제어 009 - HALT

KRL에서 HALT 키워드는 프로그램 실행을 중지시킵니다. 중요한 점은, 프로그램 실행중에 HALT를 만나더라도 진행중인 로봇 모션은 계속됩니다. 절대절대 HALT 명령을 사용하여 로봇을 중지시킨다는 생각하시면 안됩니다. 로봇 주변의 사람뿐 아니라 기구물들도 위험에 처할 수 있습니다. HALT 로 정지된 프로그램은 로봇 펜던트의 시작버튼을 통해서만 계속 진행시킬 수 있습니다. 감사합니다.

KUKA KRL 문법: Program 실행 흐름 제어 008 - EXIT

앞서 LOOP 문에 대해 설명드릴 때 EXIT로 LOOP를 탈출한다고 설명드린바 있는데요, https://dsseo.tistory.com/12 KRL에서 EXIT 키워드에 대한 정확한 설명은 "반복문을 탈출 하기 위해 사용한다" 입니다. 반복문 이라고 하면, 앞서 설명 드렸던 LOOP ... ENDLOOP REPEAT ... UNTIL WHILE ... ENDWHILE FOR ... ENDFOR 4가지 구문 모두를 통칭합니다. 아래 예제에서 디지털 입력신호 1이 ON일 때와, OFF일 때 EXIT에 의해 ROBOT의 궤적이 달라지게 됩니다. 디지털 입력신호 1이 OFF라면, 로봇은 HOME 위치를 떠나 POS_1 - POS_2 - POS_4번위치를 계속이동하기를 반복합니다. 디지털 입력신호 1이 ON이라..

KUKA KRL 문법: Program 실행 흐름 제어 007 - CONTINUE

KRL에서 CONTINUE 명령은 프로그램 처리를 위한 advance run 중지를 막는 용도로 사용됩니다. 이게 좀 헷갈리실 수 있는데, 예를 들어보겠습니다. 디지털 아웃 신호1, 2를 살리는 예제입니다. CONTINUE가 없다면, 프로그램을 처리하는 advance run이 디지털 아웃 신호를 살리는 "찰나"에 잠시 처리를 멈춥니다. CONTINUE $OUT[1]==TRUE CONTINUE $OUT[2]==TRUE 하지만 KRL에서 CONTINUE 명령은 매우 주의해서 사용해야 합니다. 실제 현장 프로그램에서 로봇 프로그램의 Cycle Time을 줄이기 위해 CONTINUE 명령으로 도배(?)된 프로그램을 본적이 있는데요, 이런 상황을 가정해 보겠습니다. 디지털 아웃 신호 1을 살리고, 아주 짧은 시간..

KUKA KRL 문법: Program 실행 흐름 제어 006 - FOR ... ENDFOR

오늘은 KRL에서 제공하는 반복문 FOR ... ENDFOR를 소개해 드리겠습니다. FOR ... ENDFOR 구문은 FOR 뒤에 변수를 특정값으로 초기화 한 후 변수를 지정한 숫자까지 증가시키는 방식으로 반복할 횟수를 정합니다. 아래 코드는 변수 A를 선언하고 A값을 1로 초기화한 다음 10까지 2씩 증가시키는 동안 FOR ... ENDFOR 내의 코드를 반복합니다. A의 값이 1, 3, 5, 7, 9까지 증가 하는 동안 코드는 반복되고 11이 되면 지정한 숫자 10보다 커지기 때문에 반복문을 빠져나갑니다. INT A FOR A=1 TO 10 STEP 2 B=B+1 ENDFOR 5번 반복했으니 반복문 탈출 후 B의 값은 원래의 값보다 5가 커져있을겁니다. 다음 시간에는 CONTINUE에 대해서 알아보겠..

KUKA KRL 문법: Program 실행 흐름 제어 005 - WHILE

오늘은 KRL에서 제공하는 반복문 WHILE ... ENDWHILE 을 소개해 드리겠습니다. WHILE ... ENDWHILE은 KUKA Manual에 보면 Rejecting Loop라고 설명되어 있는데요, WHILE ... ENDWHILE은 반복문을 시작하기 전에 조건에 맞지 않으면 반복을 거절(Reject)하기 때문입니다. 반복문이지만 한번도 반복하지 않을 수 있는 셈이죠. WHILE 뒤에 나오는 조건문 결과가 TRUE이면 첫 번째 반복을 실행하고 반복 후 조건문 결과가 TRUE이면 다음 반복을 반복 후 조건문 결과가 FALSE이면 반복을 정지 합니다. 아래 코드는 A의 값을 1씩 증가시키다가 A의 값이 100보다 작지 않을 때 WHILE ... ENDWHILE을 빠져나갑니다. A=1 WHILE A