1. .dbf 확장자 .csv로 변환

- .dbf 파일은 데이터베이스 회사인 디베이스에서 개발한 확장자로 1983년 dBASE II 가 도입되면서 사용되었음

- 때문에 아직도 오래된 소프트 웨어나, 디베이스를 기반으로 하는 소프트웨어는 .dbf 로 파일을 output 하며, 디베이스가 없다면 파일을 읽고 수정하기가 굉장히 번거로움

- 엑셀의 경우도 dbf 파일을 읽을 수 있으나, 자동측정장치와 같은 하드웨어로 대량의 데이터를 장기간 수집했을 경우, 수작업을 통하여 엑셀파일로 접근하는게 어렵기 때문에, 보다 쉽게 .dbf 파일을 .csv 파일로 변환할 수 있어야함

 

 

code---------------------------------------------------------------------------------

# 패키지 임포트

import csv 
from dbfpy import dbf 
import os 
import sys





csv_fn = "all.csv"

with open(csv_fn,'wb') as csvfile:

    for file_name in os.listdir('.'):

        if file_name.lower().endswith('.dbf'):

            print ("Converting %s to csv" % file_name)



            in_db = dbf.Dbf(file_name)

            out_csv = csv.writer(csvfile)





            for rec in in_db:

                out_csv.writerow(rec.fieldData)

   

            in_db.close()

            print ("Done...")

   

        else:

            print ("Filename does not end with .dbf")

 

 

figure 1. 코드 설명

 

- 위 코드의 구조는 .dbf 파일을 읽은 후, 빈 csv 파일에 내용을 붙여넣어 새롭게 생성하는 구조임

(convert가 아닌 새로운 시트에 복사 생성)

 

- 패키지 모듈 중 dbf 파일을 읽을 수 있는 패키지 dbf는 파이썬 2.x 버전에서만 사용가능함! 반드시 가상환경 사용

- (아나콘다를 통한 가상환경 명령어 사용 참고 https://imlanktonlifelab.tistory.com/11)

 

 

- 변환은 os 모듈의 디렉토리에서 진행되며, 생성 csv 파일 또한 디렉토리 내에 생성됨

- 디렉토리 변경 코드는 아래

 

code--------------------------------

os.chdir('C:/Projects/dbf2csv/')

-------------------------------------

 

- 'C:/Projects/dbf2csv/' 대신 디렉토리 붙여넣기

 

 

1. 아나콘다(anaconda) 가상환경 만들기 

 

명령 프롬프트(window 키 + R) 창에 cmd

 

figure 1. 명령프롬프트 cmd

 

code -----------------------------------------

>>> conda create -n env python=3.7

-----------------------------------------------

## conda에게 create(생성) 명령을 내림. -name(이름이) "env"이고 python 버전이 3.7인.  env는 사용자의 편의대로 변경가능 (python=2.7 입력 시, 2.7 버전 사용가능. 간혹 3.x 버전에서 호환 안 되는 모듈이 있음)

 

figure 2. 아나콘다 가상환경 생성

2. 아나콘다(anaconda) 가상환경 리스트 확인

 

code -----------------------------------------

>>> conda env list

-----------------------------------------------

## conda (virual)env(iorment) 가상환경 list를 확인해라.

 

figure 3. 아나콘다 가상환경 리스트 확인

 

 

3. 아나콘다(anaconda) 가상환경 활성화(activate)

- 위 2번에서 생성한 가상환경을 이용하려면, 항상 activate 여부를 확인해야함

 

code -----------------------------------------

>>> activate py37_32

-----------------------------------------------

## (conda) "py37_32" 이름의 가상환경을 activate(활성화) 해라. py37_32는 사용자의 편의대로 변경가능

 

3-1. 아나콘다(anaconda) 가상환경 비활성화(deactivate)

 

code -----------------------------------------

>>> deactivate

-----------------------------------------------

## 활성화 중인 가상환경을 비활성화(deactivate) 해라.

 

figure 4. 아나콘다 가상환경 활성화(activate) 상태

 

 

4. 활성화 중인 가상환경 정보확인(info)

- 활성화된 가상환경의 정보를 확인합니다. 반드시 활성화 상태에서 명령어를 입력해야함

- 가상환경이 실행 중인 platform과 파이썬 버젼(version) 확인이 가능함

 

 

code -----------------------------------------

>>> conda info

-----------------------------------------------

## 활성화 중인 가상환경의 정보(info)를 나타내는 명령어 실행해라.

 

- 파이썬 버전을 바꾸어 가상환경을 생성하였는데도, info 명령어에서 파이썬 버전이 바뀌지 않는다면

아래 코드로 확인해볼 것(가상환경 활성화 상태에서)

 

code -----------------------------------------

>>> python --version

-----------------------------------------------

 

- 활성화 되어있는 가상환경의 파이썬 버전을 표시함

 

 

figure 5. 활성화 중인 가상환경 정보확인

 

 

 

5. win64 bit 환경에서 win32 bit 가상환경 생성하기

- 일반적으로 최신 컴퓨터 환경의 경우, 윈도우 64bit 플랫폼에서 움직이며, 특정 프로그래밍을 위해서는 

win32 환경을 구축해야함

 

 - 제어판 > 시스템 및 보안 > 시스템에서 사용 중인 컴퓨터 시스템 종류 확인가능

figure 6. 컴퓨터 시스템 종류 확인

 

명령프롬프트에서 아래와 같이 코드를 순서대로 입력

 

code -----------------------------------------

>>> set CONDA_FORCE_32BIT=1

>>> conda create py37_32

>>> activate py37_32

>>> conda config --env --set subdir win-32

>>> conda install python=3.7 anaconda 

>>> conda install -n py37_32 spyder

-----------------------------------------------

 

## set CONDA_FORCE_32BIT=1 : 콘다환경을 32bit로 강제세팅해라.

## conda create py37_32 : (32bit로 강제세팅 된 이후) "py37_32" 이름의 가상환경을 생성해라. (이름변경가능)

## activate py37_32 : "py37_32" 이름의 가상환경을 활성화해라.

## conda config --env --set subdir win-32 :  (py37_32 가상환경이 실행 후) 가상환경의 서브디렉토리를 win-32로 세팅

## conda install python=3.7 anaconda : 실행 중인 가상환경(py37_32)의 서브디렉토리가 win-32로 세팅된 상태에서 

파이썬을 3.7 버젼으로 재설치

## conda install -n py37_32 spyder : "py37_32" 이름의 가상환경에 spyder 설치

 

 

- 위와 같은 방법으로 진행해한다면 win32bit 환경 위에 spyder 개발환경을 구축할 수 있음

   

code -----------------------------------------

>>> activate py37_32

>>> spyder

-----------------------------------------------

 

figure 7. 가상환경 위 스파이더(spyder) 개발환경 구축

대회를 마친 kaggle competition 중 이진 이미지 분류 대회인 Statoil/C-CORE Iceberg Classifier Challenge 의 데이터와 Notebook을 분석하고 필사하며 공부하는 중, 생각보다 빠르게 첫 번째 장애물에 부딪혔다.

 

바로, 캐글 Kernel 상 작업을 위해서는 *.json 파일을 읽어야하는데, 주어진 데이터셋은 *.7z로 되어있는게 아닌가!

심지어 kernel 상에서는 *.7z의 압축을 해제할 수도 없는 상황.

 

캐글코리아의 운영진이자, 캐글 마스터이신 유한님의 강의를 살펴봐도 아쉽게 이 부분에 대한 내용은 찾을 수 없었다. (꿀팁이 난무하는 엄청난 강의...ㄷㄷ 꼭 한 번쯤 들으시길)

 

(잘 알지는 못하지만, 아마도 끝난 competition의 경우, 데이터셋의 제공을 압축파일 형태로 바꿔 제공하면서 생긴 문제가 아닌가 싶다. 위 competition의 유한님 youtube 링크는 아래 참조)

 

유한님의 강의 참조 : (https://www.youtube.com/watch?v=lDnTS3h8HRk)

 

문제를 해결하고자 캐글상에 같은 문제를 겪고 있는 사람이 있는가 싶어, 검색한 결과 캐글의 운영팀에서 답변한 자료가 존재함을 알 수 있었다.

다음의 코드와 해결책은 아래 링크에서 답변된 캐글팀의 Paul Mooney의 해결책을 컴퍼티션에 맞게 수정한 것이다.

혹시나 유한님 강의를 따라가면서 필자와 같은 문제를 겪는분들에게 도움이 되길!

 

참조 : (https://www.kaggle.com/general/129520#752512)

 

Accessing files under *.7z archive files | Data Science and Machine Learning

Events and topics specific to our community | Kaggle Forum

www.kaggle.com

 

CODE=========================================================

 

!pip install pyunpack
!pip install patool

os.system('apt-get install p7zip')

 

import os
from pyunpack import Archive
import shutil

 

if not os.path.exists('/kaggle/train/') :
    os.makedirs('/kaggle/train/')

Archive('/kaggle/input/statoil-iceberg-classifier-challenge/train.json.7z').extractall('/kaggle/train/')

if not os.path.exists('/kaggle/test/') :
    os.makedirs('/kaggle/test/')

Archive('/kaggle/input/statoil-iceberg-classifier-challenge/test.json.7z').extractall('/kaggle/test/')

for dirname, _, filenames in os.walk('/kaggle/'):
    for filename in filenames:
        print(os.path.join(dirname, filename))

 

 

train = pd.read_json('../train/data/processed/train.json')
test = pd.read_json('../test/data/processed/test.json')

===============================================================

 

코드는 Archive 라는 라이브러리를 통해 *.7z 파일을 다른폴더로 추출하는 과정을 보여준다. 다른폴더가 중요하다.

코드를 실험해본 결과, 기존폴더와 다른폴더를 새로 만들어서 만들어진 폴더로 추출하지 않는다면, 이상하게 Unpack 되지 않는다는 오류가 발생한다. (왜 이런건지 설명 가능하신분 댓글로..)

 

이에 필자는 기존 input 또는 working 폴더 대신에 train, test 라는 폴더를 새로 생성하여, 그 안에 추출하여

작업을하도록 하였다.

 

이만, Keep going!

'프로그래밍 > 기타' 카테고리의 다른 글

[dbf to csv] .dbf 확장자 .csv 변환  (1) 2020.06.23

+ Recent posts