10초마다 한 줄씩 추가되는 데이터 파일에서 원하는 데이터만 골라내는 프로그램입니다. 처리할 데이터의 형태를 보면 아래와 같습니다.
12-08,09:35:00,21,37,31,67,129,135
12-08,09:35:10,21,39,36,64,128,134
12-08,09:35:20,21,41,40,61,126,134
12-08,09:35:30,21,42,43,59,126,134
12-08,09:35:40,22,44,46,58,125,134
12-08,09:35:50,22,45,48,58,125,133
12-08,09:36:00,23,46,50,59,124,133
12-08,09:36:10,23,47,52,58,124,133
...(생략)...
CSV 타입으로 작성된 데이터로 {날짜}, {시각}, {데이터1}, ... {데이터6}
라는 패턴을 가지고 있습니다. 시각 데이터를 살펴보면 데이터가 10초마다 한 번씩 기록된 것을 알 수 있습니다. 제가 원하는 데이터는 첫 번째 줄이 기록된 시각으로부터 1분 간격의 데이터입니다. 그래서 첫 번째 데이터를 읽어 시각을 확인한 다음 초 단위 값이 같은 줄만 골라내서 따로 저장하고자 합니다. 이런 목적을 가지고 작성된 파이썬 코드는 아래와 같습니다.
import sys
def line_picker(file_name):
with open(file_name, 'r') as f:
data = f.readlines()
ref = data[0][12:14]
picked = [d for d in data if d[12:14] == ref]
save_file_name = '_' + file_name
with open(save_file_name, 'w') as nf:
nf.writelines(picked)
if __name__ == '__main__':
print(sys.argv[1])
line_picker(sys.argv[1])
처음에는 CSV 데이터 형식대로 각 데이터를 구분해서 읽고, 그 중 초 단위 시각만 별도로 분리해내는 코드를 짜려고 했습니다. 그런데 하고자 하는 일에 비해서 불필요한 코드가 많아질 것 같아서 단순히 한 줄에서 12, 13번 글자를 기준 삼아 같은 값을 찾아서 골라내는 방식으로 구현하였습니다.
프로그램을 실행할 때는 아래와 같이 데이터 파일명을 인자로 넘겨주면 됩니다.
> python line_picker.py log_ext_temperature.csv
그러고 나면 아래와 같이 정리된 데이터가 생성되었습니다.
12-08,09:35:00,21,37,31,67,129,135
12-08,09:36:00,23,46,50,59,124,133
12-08,09:37:00,26,52,59,60,123,132
12-08,09:38:00,30,55,64,60,122,131
12-08,09:39:00,33,57,68,61,121,130
12-08,09:40:00,36,59,71,61,121,130
12-08,09:41:00,39,59,73,61,121,129
12-08,09:42:00,41,60,75,61,121,129
12-08,09:43:00,43,61,76,60,121,129
12-08,09:44:00,45,62,77,60,120,129
...(생략)...
'연구 노트 > Python' 카테고리의 다른 글
파이썬으로 파일을 정렬하고 이름 변경하기 (0) | 2020.12.10 |
---|