directory 만들고 지우기, 파일 이름 검색하기 등등 dir과 파일에 관련된 코딩이 필요할 때 glob와 os에 대하여 정리합니다.

 

우선 아래 두 패키지를 import 합니다.

 

import os
import glob

0. 현재 폴더 위치 얻기

   cwd = os.getcwd()

   윈도우와 리눅스를 구분하는 방법으로 \\가 있는지 확인하면 됩니다.

if "\\" in cwd :
    print('win')

 

1. 폴더(directory) 만들기

  원하는 이름의 dir를 만듭니다. 전략 실행하는 중에 매매와 상태에 대한 정보를 저장하여야합니다. 간단하게 파일을 사용할 수도 있고 DB를 사용할 수 있습니다. 우선 간단하게 파일을 사용합니다. 전략별로 혹은 일자별로 별도의 홀더를 만들어서 관리하면 좋을 것 같습니다. 따라서 필요한 이름으로 폴더를 만들 필요가 있습니다.

 폴더를 만드는 방법은 간단합니다. 

os.mkdir('.\\test')

2. 폴더(directory) 지우기

  일자가 지나면 기존 전략으로 생성한 폴더를 지워야하는 경우가 있습니다. 이를때는 rmdir를 사용합니다 단 rmdir()을 사용하기 전에 해당 폴더는 비워져있어야 합니다.

rmdir('.\\test')

 

3. 파일명 검색하기 

특정 폴더에 있는 파일명을 검색해봅시다. 프로그램이 비정상적으로 종료가 된 후 다시 시작할 때 기존 매매 상태로 복귀를 하여야 합니다. 이때 전략 실행 중 상태 값을 저장한 파일을 읽어서 이전과 같은 상태로 만들어야 합니다.

예를들어 .\\working 폴더에 아래와 같은 상태 정보가 저장되어 있다고 가정해봅시다.

우리가 해야할 일은 여기에 있는 파일 명을 list로 받아서 각 파일을 읽은 후 해당 ticker의 상태 값을 읽어야 합니다. 이때 사용할 함수는 glob.glob입니다. filter에 들어갈 적절한 문자열을 결정해서 전달하면 됩니다. 

def get_filenames() :
    files = []
    filter = '.\\working1\\' + '*_order_status.txt'
    for filename in glob.glob(filter): 
        files.append(filename)
    for fname in files :
        print (fname)
    return files

 

이 코드를 실행하면 아래과 같이 working에 있는 파일명 list를 받을 수 있습니다. 파일명에 있는 ticker 정보를 바탕으로 해당 ticker의 상태 정보를 update하면 됩니다.

 

4. 파일 지우기

 트레이딩이 끝나면 중간에 발생한 파일을 지워야 하는 경우가 있습니다. 특히 일 단위로 정산을 하는 경우에는 동작 중 발생한 파일을 반드시 지워야합니다.

3번에서 설명한 파일명 검색 후에 원하는 파일을 지우는 예제입니다. 아래 예제에서는 'BCH'를 가진 파일을 지웁니다.

 

    filter = '.\\working1\\' + '*_order_status.txt'
    for filename in glob.glob(filter): 
        if filename.find('BCH') >= 0 :
            os.remove(filename)

이 코드를 실행한 결과입니다. 'BCH'를 가진 파일만 지웠습니다.

 

 

반응형

설정

트랙백

댓글