天气数据的demo(2)

天气数据的demo(2)

本次的是数据清洗+将抓取的json数据保存到本地中

#-*- coding:utf-8 -*-

import pandas as pd
import urllib.request
import json
import csv
import os
import re
import time

from datetime import datetime
def get_week_day(date):
  week_day_dict = {
    0 : '星期一',
    1 : '星期二',
    2 : '星期三',
    3 : '星期四',
    4 : '星期五',
    5 : '星期六',
    6 : '星期日',
  }
  day = date.weekday()
  return week_day_dict[day]

def get_windpower(windpower):
    windpowers = ''

    if windpower.find('-') >= 0:
        windpowers = str(windpower.split('-')[1].split('级')[0])
    else:
        windpowers = str(windpower.split('级')[0])

    if windpower == '微风':
        windpowers = '0'

    return windpowers

def get_wind(kwind):
    wind = ''
    if kwind == '无持续风向':
        wind = '0'
    elif kwind.find('微风') >= 0:
        wind = '0'
    elif kwind == '东风':
        wind = '1'
    elif kwind == '南风':
        wind = '2'
    elif kwind == '西风':
        wind = '3'
    elif kwind == '北风':
        wind = '4'
    elif kwind == '东南风':
        wind = '5'
    elif kwind == '东北风':
        wind = '6'
    elif kwind == '西北风':
        wind = '7'
    else:
        wind = '8'

    return wind

def get_weather(weathers):
    weather = ''
    if weathers.find('暴') >= 0:
        weather = '10'
    elif weathers.find('冻') >= 0:
        weather = '9'
    elif weathers.find('大雪') >= 0:
        weather = '8'
    elif weathers.find('大雨') >= 0:
        weather = '8'
    elif weathers.find('中') >= 0:
        weather = '7'
    elif weathers.find('霾') >= 0:
        weather = '6'
    elif weathers.find('夹') >= 0:
        weather = '5'
    elif weathers.find('小') >= 0:
        weather = '4'
    elif weathers.find('阵') >= 0:
        weather = '3'
    elif weathers.find('阴') >= 0:
        weather = '2'
    elif weathers.find('沙') >= 0:
        weather = '1'
    elif weathers.find('尘') >= 0:
        weather = '1'
    else:
        weather = '0'

    return weather

def get_all_year_city(year):

  file_name = "C:/Users/aaa/Desktop/weather/2345城市编码/全量/"+str(year)+"demo.csv"
  with open(file_name) as f:
    #   创建csv文件读取器
    reader = csv.reader(f)
    header_row = next(reader)
    #   定义4个list保存数据
    city_name, city_code, area_code, area_name = [], [], [], []
    for row in reader:
        city_name.append(row[0])
        city_code.append(row[1])
        area_code.append(row[2])
        area_name.append(row[3])
    return city_name,city_code,area_code,area_name


def  tianqiload(fp,year,city_name,city_code):
    file = open(fp, "a")
    file.write('地区名称' + ',' + '地区编码' + ',' + '日期' + ',' + '星期' + ',' + '最高气温' + ',' + '最低气温' + ',' + '天气' + ',' + '天气等级' + ',' + '风向' + ',' + '风向等级' + ',' + '风力' + ',' + '风力等级' + '\n')
    for cn, cc in zip(city_name, city_code):
     
        with open("C:/Users/aaa/Desktop/weather/" + str(cc) + "weather" + str(year) + ".json", 'r') as rf:
            content = rf.read()
            print(content)
            pattern = re.compile('{ymd:\'(.*?)\',bWendu:\'(.*?)\',yWendu:\'(.*?)\',tianqi:\'(.*?)\',fengxiang:\'(.*?)\',fengli:\'(.*?)\',',re.S)
            # print(pattern)

            items = re.findall(pattern, content)
            for item in items:
                week = get_week_day(datetime.strptime(item[0], "%Y-%m-%d"))
                windpower = get_windpower(str(item[5]))
                wind = get_wind(str(item[4]))
                yeart = item[0].split('-')[0]
                # print(yeart)
                montht = item[0].split('-')[1]
                # print(montht)
                dayt = item[0].split('-')[2]
                # print(dayt)
                date = datetime.date(datetime(year=int(yeart), month=int(montht),day=int(dayt)))

                # print(date)
                weather = get_weather(str(item[3]))

                file.write(str(cn) + ','
                            + str(cc) + ','
                            + str(date) + ','
                            + week + ','
                            + str(item[1].split('℃')[0]) + ','
                            + str(item[2].split('℃')[0]) + ','
                            + str(item[3]) + ','
                            + weather + ','
                            + str(item[4]) + ','
                            + wind + ','
                            + str(item[5]) + ','
                            + windpower + '\n')

            time.sleep(0.3)
    file.close()

if __name__ == '__main__':
    fp = 'C:/Users/aaa/Desktop/weather/58238_new_2021补偿.csv'

    if os.path.exists(fp):
        os.remove(fp)

    years = [2021]
    for i in years:
        city_name = get_all_year_city(i)[0]
        city_code = get_all_year_city(i)[1]
        tianqiload(fp, i, city_name, city_code)

本人也是刚刚学习,有问题的地方,希望能指点一下,互相学习学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值