기존에 있는...redis 서버가 해킹당했다..주륵


방화벽 다내려놓고...모든 곳에서 연결하도록 해놓으니 


아주 좋은 허니팟이 된 모양..


기존 서버를 반납하고 새롭게 다시 만들었다


이번엔 mysql을 설치했는데


내 컴퓨터에서 workbench를 통해서 데이터를 넣고 싶어졌다.


유저를 만든후에 그 유저에게 권한을 주고 


내 컴퓨터에서 workbench로 접근하자 



$mysql
$create dababase mydb;
$use mydb; 
$grant all privileges on *.* to '유저명'@'%' identified by '비밀번호';

grant 명령어는 권한을 주는 명령어인데 모든 권한을 저 계정에게 부여한다는 명령어다.


생성후 내 컴퓨터에서 접속해본다.



+ 버튼을 클릭해준다.



connection Name 엔 원하는 이름

hostname 에는 접속할 서버  ip주소

username 에는 전에 만든 유저계정을 누르고 Test Connection을 누르면 된다


이런식으로 패스워드를 입력하면 된다 .




블로그 이미지

알파세

오늘 데이터 가공 때문에 100개정도 되는 폴더를 하나에 병합해야만 했다


해당 파일은  최소 수만에서 최대 20만개의 데이터가 한 row 에 하나씩 있었다.


100개의 파일을  총 100개의 열을 가진 하나의 엑셀파일로 만들어야 했다...


일일히 노가다는 저어어어어어어얼대 하고 싶지 않았다.


뭐..컴터한테 시켜야지 


어처피 엑셀을 이용하는 과정은 빈번하게 발생하고 업무 자동화에도 나중에는 눈을 돌려야 할 필요성을 느끼는 찰나에 


마침 잘됬다 싶어 모듈을 검색하였다^^ㅎㅎ


파이썬으로 


# -*- coding: utf-8 -*- 
import os
from openpyxl import Workbook


openpyxl 이라는 모듈인데 


pip install openyxl 을 하면 깔리게 되어있다


엑셀파일에 관련된 모듈인데 사용법이 심플하고 


셀별로 지정할 수 있다는 점이 매우 맘에 들어서 선택했다. 

os 모듈은 폴더 디렉토리의 파일들을 전부 찾으려고 사용한 모듈이다 .

def excelTest(): path_dir = 'C:\\---\\csv\\' # 가져올 파일들이 있는 directory path file_list = os.listdir(path_dir) # path에 존재하는 파일 목록 가져오기 file_list.sort() fullFilePath = '' fileDic = {} fileIdx = 0 for fileName in file_list: fullFilePath = path_dir + fileName print(fullFilePath) f = open(fullFilePath, 'r', encoding='utf-8') lines = f.readlines() lineList = [] #리스트 선언 for line in lines : lineList.append(line) # lineList에 저장 fileDic[fileIdx] = lineList #key = fileIdx value = lineList fileIdx += 1 # 증가


1. 모든 파일에 접근하여 데이터를 저장해 놓자

os 모듈을 이용해서 폴더 디렉토리의 모든 파일ㅑ을 저장해 놓은뒤 

하나하나 접근해서 파이썬 딕셔러니에 저장해놓는다


dic['인덱스' ] = 한개의 파일에 대한 점수들의 리스트


이런식으로 저장을 해놓았다

 

def xlsxWriter(fileDic):
    
    wb = Workbook() 
    fileName = 'sample.xlsx'
    
    sheet = wb.active
    sheet.title = "first_Sheet"
    for fileIdx in range(1, len(fileDic)):
        lineList = fileDic[fileIdx]
        rowIdx = 1
        for value in lineList:
            sheet.cell(row = rowIdx, column = ( fileIdx ) ).value = float(value)
            rowIdx += 1 
   
    wb.save(filename = fileName)
            


여기서 엑셀파일을 저장하는 모듈을 사용하게 되는데 


sheet.cell(row = rowIdx, column = ( fileIdx )).value = float(value)

여기서 몇행 몇열에 무슨 데이터를 넣을지 선택할 수있다

나는 딕셔너리 갯수 만큼 루프를 돌린후에 

한 파일의 데이터를 한 열에다 담는 과정을 거쳤다


키값은,  열 값으로도 사용하였다. 나는 이렇게 사용하는 걸 싫어하는데

빠르게 데이터가 요구한 상황이여서..ㅠㅠ (불금이잖아?) 


결과는 



50메가 정도의 무지막지한 엑셀 파일이 생기게 되었다...

ㅎ.ㅎㅎ만드는 것도 시간이 꽤 걸린다.

뭐 확인용으로 만든거라 그렇게 많은 생각을 거치지 않아 코드가 구리지만..


이번 기회로  이 모듈의 가능성을..좀 보았다


업무 자동화를 꿈꾸는 사람이면 좀 뒤적여봐도 될만할것같다.

블로그 이미지

알파세

오늘 잘 도착 했다 ㅎㅎㅎ

쓸모가 있는 녀석이다

그런데.. 이게 한번 밖에 안보내니까 온지 안온지 그렇게 잘 확인하긴 힘든 것 같다. 

그래서 한 20초 간격으로 재촉을 하고 내가 특정 문구를 말해야지 

꺼지는 봇이 필요해졌다.


setInterval , clearInterval ,이란 함수를 이용해서 여러번 나에게 말을 걸게끔 만들자


똑같은 메세지를 여려번 보내는건 재미 없으니 이런 문구 저런 문구를 추가시켜보자

ㅎㅎ


수정된 함수는 다음과 같다

애로우펑션과 안쓴것이 있는데. 

나중에 확인 후 리팩토링을 진행하도록 하자 

function botMessage(){ let botTextList = [ '-님 돈 보내셨나요..?', '저기요 -님..?', '-님. 돈 보내셨나요..? 보냈거나 확인 했으면 말을 해주세요!', '계속 씨끄럽게 굴꺼에요!', '멜!!', '돈보내!!' ] let cnt = 0; startAlert = () => { botMsgLoop = setInterval( () => { bot.sendMessage(CHAT_ID,botTextList[cnt]).then(function(data){ console.log('success'); cnt += 1 ; if( cnt == botTextList.length){ cnt = 0; }; }).catch(err => {console.log(err);}); }, 20000); }; startAlert(); /* start sending bot */ /* 메세지 */ bot.on('message', (msg) => { const chatId = msg.chat.id; // send a message to the chat acknowledging receipt of their message if (msg.text === "확인" || msg.text === "그래"){ bot.sendMessage(chatId, '-님, 확인하였습니다 ^^. 내일 뵐께요.'); clearInterval(botMsgLoop); return; } else { bot.sendMessage(chatId, '-님, 그래, 또는 확인 이라고 말해 주셔야 해요. 아니면 계속 보낼껍니다.'); } }); }



기여운 봇이 생겼다 



블로그 이미지

알파세