Coding/Python Matlab

multiple column data reading

smores 2017. 3. 14. 01:05

예전에 작성해 놓은 코드가 있었는데 까맣게 잊고는 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)

이렇게 나눈 후 위의 방식으로 컬럼별 데이터 리스트의 생성과 데이터 타입 변환을 하면 됨.