예전에 작성해 놓은 코드가 있었는데 까맣게 잊고는 for loop 로 무식하게 처리하는 프로그램을 만들어 쓰고 있었다. -_-
코드에서 유의할 점은 0::5 같은 형식으로 시작, 끝은 마지막까지, 그리고 step 5 로 일종에 내재된 for loop 를 쓰듯 리스트를 작성하는 것이고, 다음으로 리스트 내용이 string 인데 그것을 원하는 타입으로 바꾸면서 다른 리스트에 옮기는 과정이 map() 함수를 사용해서 깔끔하게 처리할 수 있다는 점.
def ReadXgrid(xgridname):
try:
f=open(xgridname)
except:
print xgridname, "open error"
quit()
s=f.read()
f.close()
s1=s.split()
# xgrid format : x_pos feat_num y_pix x_wig y_wig
c0=s1[0::5]
c1=s1[1::5]
c2=s1[2::5]
c3=s1[3::5]
c4=s1[4::5]
xpos=map(float,c0[1:])
featnum=map(int,c1[1:])
ypix=map(int,c2[1:])
xwig=map(int,c3[1:])
return xpos, featnum, ypix, xwi
한편 data string 을 split() 하는 과정에서 두가지 이상의 delimiter 가 사용될 시 regular expression 에 준비된 함수로 쉽게 처리 가능하다. 예를 들어 yahoo finance 에서 받아오는 주식 데이터의 경우 .csv 포맷인데 한 라인 끝나는 부분은 \n 로, 한 라인 내에서의 아이템 별 구분은 comma 로 되어 단순히 split() 으로 나누기가 그렇다. 이 문제의 해결 코드는 다음과 같다.
import re
buf = open('AAPL.csv').read()
buf2 = re.split('\n|,', buf)
이렇게 나눈 후 위의 방식으로 컬럼별 데이터 리스트의 생성과 데이터 타입 변환을 하면 됨.
'Coding > Python Matlab' 카테고리의 다른 글
python vs cpp speed test (0) | 2017.07.18 |
---|---|
아나콘다, 선형회귀분석 (0) | 2017.06.13 |
pip - 윈도우즈 python 에서도 지원 (0) | 2017.02.08 |
여러 파일들의 이름 특정 패턴 변경 ren2.py (0) | 2017.01.12 |
현재 실행하고 있는 함수 이름 inspect.stack()[0][3] (0) | 2017.01.12 |