• Programming by 白影를 방문하신 여러분을 환영합니다 :)

여러 파일로 이루어진 세트형태의 경우 용량 구하기를 할때 확장자별로 전부 확인을 해야하는데 이런 경우

네이밍이 포함된 파일 경로를 검색하여 합계를 구하면 쉽게 해결된다.

폴더별로 따로 구분하지 않은 경우 사용할 수 있다.

물론 파일의 수가 늘어나면 연산 시간을 늘어나는 구조이다.


1. 해당 폴더의 경로를 구하고

2. 해당 폴더의 파일들은 전부 검색하면서 원하는 문자열이 포함되어있는지 여부를 체크하여

3. 해당 파일의 용량을 합산한다.


for (path, dirs, files) in os.walk(folderPath):
    if files :
        for filename in files :
            if filename.count(“FileName”) >= 1 :
                filename = os.path.join(path, filename)
                print filename + ' : ' + str(os.path.getsize(filename))
                folder_size += os.path.getsize(filename)
print "Folder = %0.1f KB" % (folder_size/(1024.0))


'Programming > Python' 카테고리의 다른 글

Python + Oracle Connect  (0) 2015.10.30

Python + Oracle Connect

Programming/Python 白影 2015. 10. 30. 14:44

Python에 Oracle DataBase에 접속할 일이 생겨서 약간의 검색과 삽질을 해보았다.


일단 cx_Oracle을 설치하는 부분이 많이 보이는데 자신이 64비트라고 64비트 파일을 받으면 안된다.

(URL : https://pypi.python.org/pypi/cx_Oracle)


해당 설치가 된 비트를 확인하고 32비트로 설치를 진행하였다.


이때 해당 환경사항은 Oracle 11g, 32bit, Python 2.7이였다.


2.7이 설치가 안되었다고 뜨는 사람들은 환경변수에 가서 Python 설치한 폴더경로를 Path에 추가해주면 된다.


import 하는 부분에서 에러가 나지 않고 connect 설정하는 부분에서 에러가 나더라...


맞다... 내가 접속할 Database 버전을 따라간다... 다시 10g 버전을 찾다보니 cx_Oracle 버전이 5.0.4까지 내려갔다.

(최신버전은 11g, 12c만 지원한다. URL : http://sourceforge.net/projects/cx-oracle/files/)


위 링크에서 예전버전을 찾을 수 있으니 자신에게 해당되는 버전을 찾아서 설치하면 된다.


나는 Oracle 10g, 32bit, Python 2.7을 찾아서 설치하였다.


환경설정 후에는 매우 쉽다.


아래 간단하게 적었다. (사실 소스 부분은 별 문제가 없다.. 환경설정하는 부분이 문제지)


import cx_Oracle

connector = cx_Oracle.connect(ID, PW , TNS_INFO(IP:Port/SID))
cursorP = connector .cursor()
cursorP.execute(Query Text)


이 글에서는 저 위에 환경설정하는 부분이 도움이 될 것이라 생각된다.


망분리로 인한 인터넷이 되지 않는 관계로 크롬 포터블 버전이 필요하여


검색한 결과 되는것도 있고 안되는 것도 있어서 간단히 포스팅 합니다.


제가 쓴것은 Chromium Portable이고 주기적으로 업데이트가 되고 있습니다.


해당 사이트 주소는 아래와 같습니다.


http://crportable.sourceforge.net/


다운로드와 업데이트 로그가 기록되어있습니다.


현재 최신 버전은 44.0.2383.0 입니다. (2015.05.01 업데이트버전)




핀테크와 관련된 내용들이 요즘 들어 많이 이슈화되고 있다.

이미 해외에서는 많은 핀테크 업체들이 발전을 거듭하고 있으니 우리나라에서도 조급할만하다.

하지만 업체들이 말하기론 우리나라는 법과 규제로 인해 진행이 어렵다는 말을 많이 한다.

말 그대로 발전속도를 사회규범이 못 따라가고 있는 것이다.

그 기준을 세우려는 노력이 필요하지만... 과연? 얼마나 하고 있는지 모르겠다.

먼저 금융과 관련된 이야기를 해보겠다.

금융과 관련된 사업에 있어서 우리나라는 ActiveX를 사용하고 있어서 많은 질타를 받고 있다.

이에 반해 해외에서는 카드정보와 간단한 개인정보 입력만으로 결재가 가능하다.

해외에서는 바보라서 우리나라처럼 안 하고 있는 것일까?

물론 그런 입력방식으로 사고가 날수도 있다. 하지만 ActiveX를 쓴다고 사고가 안 나는것도 아니고 해킹을 당하지 않는 것도 아니다.

다만 빈도의 차이일 뿐이다.

해외같은 방식은 업체의 부담이 커지게된다. 보안에 더 집중해야하기 때문이다.

하지만 왜 그렇게 하고 있는 것일까?

그만큼의 투자와 위험으로 인한 보상을 다 고려했을때 사용자에게 편의성을 주는 것이 수익 증가에 도움이 된다고 보기 때문이다.

보기 때문이 아니라 통계적으로 분석을 했겠지만 말이다.

예를 들어 우리나라에서는 물건 하나를 사려고해도 설치와 입력해야하는 것들이 매우 많다.

지쳐서 결재를 안한다는 말이 나올정도로 그런 경우가 많다.

하지만 해외 사이트에서 결재를 하는 경우 처음 결재시에 카드 정보를 입력한 후 다음 결재부터는 원버튼 결재가 활성화되어있다.

사용자도 아주 편하게 원하는 것을 순식간에 결재하고 얻을 수 있으니 매우 좋다.

우리나라도 얼른 모든것을 걷어내고 exe같은 뻘짓을 그만하고 해외결재와 같은 방향으로 나가야한다고 본다.

다시 돌아와서 핀테크... 참 우리나라는 편리한 결재만을 핀테크로 보는 것에 문제가 있다.

해외에서 OO페이라는 이름의 핀테크는 없다고 보면 된다.

오히려 이제까지의 결재에 있어서 보안과 업체에 있어 도움이 되는 솔루션 개발로 방향이 잡혀있다고 보면 된다.

간편한 결재는 이미 도입이 되어 있다는 것이다. 이것을 얼마나 유지하고 안전하게 하느냐가 핵심이라는 것이다.

우리나라는 아직 그 간편한 결재조차 비밀번호 입력이 필수로 들어가있다. 

아직도 갈길이 멀다는 것이다.

우리나라와 해외의 간편결재 또는 핀테크 관련한 개념이 다르다는 것을 알 수 있다.

이대로는 계속 뒤쳐질뿐이다. 바뀌지 않는 이상 말이다.

매우 간단하다...

shp 파일의 경로로 파일을 열고

객체를 호출한 다음에

해당 sde의 layer에 집어넣는다...

여기서 객체가 1개인 경우는 상관없지만 여러개가 있는 경우 아래와 같이 while문을 이용해서 넣어주는 것이 좋다.

몇개인지 굳이 셀 필요는 없으니까...

Arcobject를 만져본 사람이라면 대략 변수가 뭘 의미하는지는 아실거라 생각하고

아래 소스만 올립니다. (아래소스만으로는 안되고... 위에 기본적인 설정 및 접속 세팅은 필요합니다...)



            IFeatureClass pFClass = pWorkspace.openFeatureClass(layerName);             

            FeatureClass shpFClass = null;    

            ShapefileWorkspaceFactory shapefileWorkspaceFactory = new ShapefileWorkspaceFactory();

            Workspace workspace = new Workspace(shapefileWorkspaceFactory.openFromFile(shpPath, 0));

            shpFClass = new FeatureClass(workspace.openFeatureClass(shpNm));

            

            String shapeFieldName = shpFClass.getShapeFieldName();

            Fields shpFields = (Fields) shpFClass.getFields();

              

            int lngIndex = shpFields.findField(shapeFieldName);

            Field field = (Field) shpFields.getField(lngIndex);

            

            int shpFieldCount = shpFields.getFieldCount();

            FeatureCursor featureCursor = new FeatureCursor(shpFClass.search(null, true));            

            IFeature shpFeature = (IFeature) featureCursor.nextFeature();

              

            while (shpFeature != null) {

                StringBuffer row = new StringBuffer();

                IFeature pFeature = pFClass.createFeature();                


                for (int index = 0; index < shpFieldCount; index++) {

                    int fieldType = shpFeature.getFields().getField(index).getType();

                    if(pFeature.getFields().findField(shpFeature.getFields().getField(index).getName())==-1){

                        if(shpFeature.getFields().getField(index).getName().equals("FID"))

                            strError=shpFeature.getValue(index).toString();

                        continue;

                    }

                switch (fieldType) {

                    case esriFieldType.esriFieldTypeDouble:

                        if(!shpFeature.getFields().getField(index).getName().equals("AREA") && !shpFeature.getFields().getField(index).getName().equals("LEN")){         

                            row.append(shpFeature.getValue(index) + "\t");

                          }

                        break;

                    case esriFieldType.esriFieldTypeInteger:      

                        break;

                    case esriFieldType.esriFieldTypeSingle:

                        row.append(shpFeature.getValue(index) + "\t");

                        break;

                    case esriFieldType.esriFieldTypeSmallInteger:

                        row.append(shpFeature.getValue(index) + "\t");

                        break;

                    case esriFieldType.esriFieldTypeString:

                      row.append(shpFeature.getValue(index) + "\t");

                    break;

                    case esriFieldType.esriFieldTypeGeometry:

                      row.append("(geometry)" + "\t");

                      

                    IGeometry Geometry = shpFeature.getShape();

                    Geometry.setSpatialReferenceByRef(FromProjection);

                    Geometry.project(ToProjection);

                  

                    IEnvelope shpExtent = Geometry.getEnvelope();

                    pFeature.setShapeByRef(Geometry);

                    break;

                }

              }

                  

                pFeature.setValue(pFeature.getFields().findField("FieldNm"), FieldValue);

                pFeature.store(); 

                shpFeature = (IFeature) featureCursor.nextFeature();     

            }


'Programming > Arcgis' 카테고리의 다른 글

ArcObject API Local 설치  (0) 2015.03.27

JqGrid로 구현된 테이블에서 특정 Column을 선택하면 기능을 작동시키고 싶은 경우

onCellSelect을 사용하면 된다.

아래는 그 예제다. (그대로 사용해도 되는지 모르겠지만... 원소스에서 내용만 수정하였다.)

예제에서는 나이에 해당하는 컬럼을 클릭할 경우 그 Row에 해당하는 사람의 이름을 출력한다.



var selectUrl = "/selectTable";

var colNames = ['이름', '나이', '학년'];

    var colModel = [

{name:'Name'    ,index:'reqstSn' ,width:0},

{name:'Age'    ,index:'jobPrgstatClcdNm' ,width:100},

{name:'Grade'    ,index:'jobSecdNm' ,width:60}

         ];

    jQuery("#grid").jqGrid({

url:selectUrl,

postData: {

        },

        mtype: 'POST',

datatype: "json",

  colNames:colNames,

  colModel:colModel,

  shrinkToFit:false,

  autowidth:true,

            height: 137,

       rowNum: 5,

            rownumbers: true,

       pagination: true,

             scroll: false,

       pager: '#ptypeGrid', 

            sortname: 'default',

  viewrecords: true,

        sortorder: "desc",

     

    loadError : function(xhr,st,err) {

    alert("Error");

        },

     onCellSelect: function(rowid, index, contents, event) 

    {    

    var cm = $(this).jqGrid('getGridParam','colModel');    

    if(cm[index].name == "Age")

    {

         alert($(this).jqGrid('getCell', rowid, 'Name'));

   

    }

});


Arcobject API를 Local에 설치하기


대부분 회사들이 망분리를 하고 있기 때문에 외부 API를 끌어다 쓸수 없는 경우가 많다.

그런경우 Local에 API를 설치하여 사용해야 하는데 Arcobject도 마찬가지이다.


본인도 갑작스런 망분리에.... 로컬로 바꾸는 법을 몰라서 조금 헤매였다...

처음 받았던 소스에 API도 제대로 다 안 들어있는 것도 문제였고 세팅도 제대로 되어있지 않았다.


먼저 설치할 API를 다운로드 받는다. (로그인 필수... 가입이 안되어있다면 가입부터 하자.)

https://developers.arcgis.com/en/downloads/

필자는 Javascrip로 개발을 하였기때문에 빨간 네모칸의 자료를 다운 받았다.

물론 구버전도 받을수 있다. (옵션 선택)



다운로드를 받은 후 압축을 푼다.



압축을 풀면 아래와 같은 내용물이 보일거다.

그중에 arcgis_js_api 부분만 필요하므로 프로젝트에 js들을 모아둔 폴더로 카피한다.

그리고 install.html 파일을 열어서 설명서를 읽어보면



위와 같은 설명이 적혀있는데 말 그대로 init.js와 dojo.js 파일을 찾아서 [HOSTNAME_AND_PATH_TO_JSAPI] 이부분을 자신이 해당 시스템의 ip 주소를 입력해주면 된다. 예를 들면 10.20.30.40이 접속 주소라면 저 부분에 적어주면 된다. Local에서 테스트 용도로 사용하려면 "http://localhost:포트번호"를 적어주면 된다.

그리고 물론 GIS에서 API 링크를 로컬 주소로 바꿔주는것도 잊어먹으면 안된다.


<script type="text/javascript" src="${Ctx}/js//arcgis_js_api/library/3.8/3.8/init.js"></script>

위와 같이 적어주면 된다. 뒤쪽의 init.js는 안 적어도 되지만 간혹 안되는 경우가 있으면 지정해주면 잘 작동한다.



'Programming > Arcgis' 카테고리의 다른 글

Arcobject shp파일을 sde의 layer에 import하기  (0) 2015.03.27

CLOB 구문 검색방법

Programming/SQL 白影 2015. 2. 19. 00:07

WHERE DBMS_LOB.INSTR(lob_column, '검색어') > 0

Joyluck 챌린저 강좌 모음

Game 白影 2015. 1. 26. 11:47

Joyluck 챌린저 강좌



'Game' 카테고리의 다른 글

영원히  (0) 2013.06.03
[LOL] Cinematic 롤 시네마틱!  (0) 2013.05.26
카이로소프트 한글패치 과정 공개  (0) 2013.05.18



강남 1970을 보고 바로 뒤에 시간이 맞는 빅히어로를 같이 봤다.

워낙 애니메이션을 좋아하기에 첫 예고편이 나왔을때부터 기대하고 있었다. 4D로 보러 가려고 했지만 일단 동네에서 감상을...

단순한 내용이지만 참 재미있게 봤다. 드래곤 길들이기 정도의 느낌이랄까?

나오는 캐릭터들도 재미있고 내용도 잘 구성되어있는 것 같다.

다만... 영화관에 애들이 지르는 소리가 좀 거슬린다는 정도? 자막이라 아주 어린 아이들은 없을줄 알았는데 생각보다 꽤 많았다...

스포를 적으면 재미가 없기 때문에 자세한 내용을 적기가 좀 애매하다 ~.~

간단하게 적어보자면... 상실감에 의한 복수극을 상실감을 이해하는 주인공이 막아선다는 정도?

음... 여력이나 시간이 된다면 4D로 보는걸 추천한다~ 필자도 또 4D로 보러갈지도 모른다... (아마도? 담주에?)

사람은 무언가를 잃고 얻어가면서 살아가게된다. 하지만 그 잃어버렸을 때의 상실감으로 삐뚤어질 수도 있지만 그 후에 또 다른 사람이 생길수도 있다는 생각을 했으면 한다.

새로운 인연으로 잃어버린 추억을 아름답게 마음속에 담고 지나갔으면 한다.

지금은 비록 잃었지만 나중에는 또 다른 즐거운 인연과 행복한 인연들이 다가올 것이다.


'Life Style > Movie' 카테고리의 다른 글

강남 1970 (2015.01.25 / MegaBox 수유)  (0) 2015.01.25
오늘의 연애 (2015.01.18 / CGV 성신여대)  (0) 2015.01.19