Python 공공데이터 기상예보 CSV 통합해주는 소스

기상예보 – 동네예보 – 초단기실황파일셋

라이브러리 포함

import csv
import datetime
import pandas as pd
import os,re

csv파일들 불러와 포멧 변경하여서 딕셔너리와 리스트로 저장


# 날짜 포멧
date_format = '%Y%m%d'
#날씨데이터 누적할 딕셔너리 초기화
weather_list = {}
part = ''
path = "origin_data"
file_list = os.listdir(path)
file_list_csv = [file for file in file_list if file.endswith(".csv")]
# print(file_list_csv)
for filename in file_list_csv:
    #csv 읽기
    f = open(path+"/"+filename ,'r', encoding='utf-8')
    if filename.find('기온')>0:
        part = 2
    if filename.find('습도')>0:
        part = 3
    position = filename[:filename.find('_')]
    print(position)
    rdf = csv.reader(f)
    for line in rdf:
        if str(line).find('Start') >0:
            first = str(line)
            index = first.find('Start') +8
            first_date = first[index:index+8]


            try:
                date_obj = datetime.datetime.strptime(first_date, date_format)
                # print(date_obj)
            except ValueError:
                print("Incorrect data format, should be YYYYMMDD")
            continue
        if line[0] == '' or len(line)<2:
                continue

        try:
            g_date = date_obj + datetime.timedelta(days=(int(line[0]) - 1))

        except ValueError:
            g_date = date_obj

        g_time = g_date + datetime.timedelta(hours=int(int(line[1])/100))
        # print(g_time)
        g_time = g_time.strftime('%Y-%m-%d %H:%M:%S')
        print(g_time)
        label = g_time+position
        if label in weather_list:
            weather_list[label][part] = float(line[2])
        else:
            if part == 3:
                weather_list[label] = [position,g_time, None,line[2]]
            if part == 2:
                weather_list[label] = [position,g_time, line[2],None]

리스트 Dataframe으로 변환 후 csv로 저장

df = pd.DataFrame(weather_list.values())
df.columns = ['point','datetime','temp','humi']
df.to_csv('weather_marge.csv', encoding='utf-8-sig')

# print(df)
f.close()

Leave a Comment