返回顶部
首页 > 资讯 > 后端开发 > Python >Python实战之天气预报系统的实现
  • 738
分享到

Python实战之天气预报系统的实现

Python天气预报系统Python天气预报 2022-12-19 06:12:29 738人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录前言一、前期准备二、代码展示三、效果展示前言 鼎鼎大名的南方城市长沙很早就入冬了,街上各种大衣,毛衣,棉衣齐齐出动。 这段时间全国各地大风呜呜地吹,很多地方断崖式降温。 虽然前几

前言

鼎鼎大名的南方城市长沙很早就入冬了,街上各种大衣,毛衣,棉衣齐齐出动。

这段时间全国各地大风呜呜地吹,很多地方断崖式降温。

虽然前几天短暂的温度回升,但肯定是为了今天的超级降温,一大早的就开始狂风四起。

周五早晨,终于体验了一把久违冷冷的冰雨在脸上胡乱的拍!昨天还有10几度的天气,今天就  只有2-3°了,真真是老天爷的脸七十二变~

广东的朋友们,听说你们哪儿最低温度都是10几度,我实名羡慕了——(要我说从哪儿听说的,昨天跟刺激战场打游戏的合作队友哪儿听说的。狠狠羡慕住了.jpg)

没啥事儿,跟大家谈一谈天气,哈哈哈,今天就给大家用代码写一款python版天气预报系统,是Tkinter界面化的,还会制作温度折线图跟气温饼图哦~一整个期待住了吧!

一、前期准备

1)运行环境

本文用到的环境如下——

python3PyCharm社区版,第三方模块:tkinter、bs4(BeautifulSoup)、pandas

prettytable、matplotlib、re。部分自带的库只要安装完Python就可以直接使用了

一般安装:pip install +模块名

镜像源安装:pip install -i https://pypi.douban.com/simple/+模块名

有准备一些数据源素材等这些大家可以用自己准备的就可以了。

二、代码展示

#coding:utf-8
from tkinter import *   
import re
from time import sleep
from urllib.request import urlopen
from bs4 import BeautifulSoup
import pandas
import prettytable
import matplotlib.pyplot as plt
from datetime import datetime
LOG_LINE_NUM = 0

class MY_GUI():
    def __init__(self,init_window_name):
        self.init_window_name = init_window_name

    #设置窗口
    def set_init_window(self):
        self.init_window_name.title("天气预报")           #窗口名
        self.init_window_name.geometry('1000x500+200+50')
        #标签
        self.init_data_label = Label(self.init_window_name, text="输入城市名")
        self.init_data_label.grid(row=0, column=0)
        self.result_data_label = Label(self.init_window_name, text="天气预测结果")
        self.result_data_label.grid(row=0, column=12)
        #文本框
        self.init_data_Text = Text(self.init_window_name, width=20, height=1)  #城市名录入框
        self.init_data_Text.grid(row=1, column=0, rowspan=2, columnspan=5)
        self.result_data_Text = Text(self.init_window_name, width=100, height=30)  #处理结果展示
        self.result_data_Text.grid(row=1, column=12, rowspan=10, columnspan=10)
        #按钮
        self.str_trans_to_md7_button = Button(self.init_window_name, text="获取天气情况", bg="lightblue", width=10,command=self.str_trans_to_md7)  # 调用内部方法  加()为直接调用
        self.str_trans_to_md7_button.grid(row=1, column=11)
        self.str_trans_to_img_button = Button(self.init_window_name, text="获取天气统计图", bg="lightblue", width=10,command=self.str_trans_to_img)  # 调用内部方法  加()为直接调用
        self.str_trans_to_img_button.grid(row=2, column=11)

    #功能函数
    def str_trans_to_md7(self):
        #储存天气情况的列表
        date,wea,tem_high,tem_low,wind_dire,wind_speed = [],[],[],[],[],[]
        #城市转ID
        city_id = pandas.read_excel('city_id.xlsx')
        dict_c = city_id.set_index('City_CN').T.to_dict('list')
        city = self.init_data_Text.get(1.0,END).strip()
        test_id = dict_c[city]
        test_id.append("".join(filter(str.isdigit, test_id[0])))
        print('城市ID:',test_id[1])
        #爬七日天气
        html_ID = "Http://www.weather.com.cn/weather/"+test_id[1]+".shtml"
        html = urlopen(html_ID)
        soup = BeautifulSoup(html.read(),'html.parser')
        ag_links = soup.find_all("li", {"class": re.compile('sky skyid lv\d')})
        for ag in ag_links:
            date.append(ag.h1.get_text())
            wea.append(ag.p.get_text())
            tem_high.append(ag.span.get_text())
            win = re.findall('(?<= title=").*?(?=")', str(ag.find('p','win').find('em'))) #正则问题的处理,摘自csdn
            wind_dire.append( '-'.join(win))
        for i in range(7):
            tem_low.append(soup.select('.tem i')[i].get_text())
            wind_speed.append(soup.select('.win i')[i].get_text())
        #输出图表
        table_ = prettytable.PrettyTable()
        table_.field_names = ['日期','天气', '最高温度','最低温度','风向','风力']
        for i in range(0,len(date)):
            table_.add_row([date[i], wea[i], tem_high[i],tem_low[i],wind_dire[i],wind_speed[i]])
        print(city,'七日天气')
        print(table_)
        weafile=open("近七日天气.txt","w+")
        weafile.write(city)
        weafile.write(test_id[1]+'/n')
        weafile.write(str(table_))
        weafile.close
        self.result_data_Text.delete(1.0,END)
        self.result_data_Text.insert(1.0,table_)
    def str_trans_to_img(self):#进行统计图的制作
        infopen = open('近七日天气.txt', 'r', encoding='gbk')
        outopen = open('out1.txt', 'w', encoding='gbk')
        lines = infopen.readlines()
        for line in lines:
            if line.split():
                outopen.writelines(line)
            else:
                outopen.writelines("")
        infopen.close()
        outopen.close()
        with open("out1.txt", encoding='gbk') as fp_in:
            with open('out.txt', 'w', encoding='gbk') as fp_out:
                fp_out.writelines(line for i, line in enumerate(fp_in) if i > 2 and i<10)
        # clearnumber
        file = open("out.txt", "r")  # 以只读模式读取文件
        something=file.readlines()
        new=[]
        for x in something:
            first = x.strip('\n')
            second=first.split()
            while '|' in second:
                second.remove('|')
            new.append(second)

        dates, highs, lows = [], [], []
        for day in range(7):
            highs.append(int(new[day][2]))
            lows.append(int(new[day][3][0:2]))
            dates.append(new[day][0])

        fig = plt.figure(dpi=128, figsize=(10, 6))
        plt.plot(dates, highs, c='red', alpha=0.5) # alpha指定颜色透明度
        plt.plot(dates, lows, c='blue', alpha=0.5) # 注意dates和highs 以及lows是匹配对应的
        plt.fill_between(dates, highs, lows, facecolor='blue', alpha=0.1) # facecolor指定了区域的颜色
        # 设置图形格式
        plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
        plt.rcParams['axes.unicode_minus']=False
        plt.title("近七日温度", fontsize=24)
        plt.xlabel('', fontsize=14)
        fig.autofmt_xdate() # 让x轴标签斜着打印避免拥挤
        plt.ylabel('Temperature(℃)', fontsize=14)
        plt.tick_params(axis='both', which='major', labelsize=14)
        plt.savefig('温度折线图.jpg')
        plt.show()


        dic_wea = {}
        for i in range(0, 7):
            if new[i][1] in dic_wea.keys():
                dic_wea[new[i][1]] += 1
            else:
                dic_wea[new[i][1]] = 1
        plt.rcParams['font.sans-serif'] = ['SimHei']
        print(dic_wea)
        explode = [0.01] * len(dic_wea.keys())
        color = ['lightskyblue', 'silver', 'yellow', 'salmon', 'grey', 'lime', 'Gold', 'red', 'green', 'pink']
        plt.pie(dic_wea.values(), explode=explode, labels=dic_wea.keys(), autopct='%1.1f%%', colors=color)
        plt.title('未来7天气候分布饼图')
        plt.savefig('气候饼图.jpg')
        plt.show()


        
        
def gui_start():
    init_window = Tk()              #实例化出一个父窗口

    ZMJ_PORTAL = MY_GUI(init_window)
    
    ZMJ_PORTAL.set_init_window()    # 设置根窗口默认属性

    init_window.mainloop()          #父窗口进入事件循环,可以理解为保持窗口运行,否则界面不展示


gui_start()

三、效果展示

1)天气预报系统

​2)温度折线图

3)气温饼图

到此这篇关于Python实战之天气预报系统的实现的文章就介绍到这了,更多相关Python天气预报系统内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python实战之天气预报系统的实现

本文链接: https://lsjlt.com/news/175191.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python实战之天气预报系统的实现
    目录前言一、前期准备二、代码展示三、效果展示前言 鼎鼎大名的南方城市长沙很早就入冬了,街上各种大衣,毛衣,棉衣齐齐出动。 这段时间全国各地大风呜呜地吹,很多地方断崖式降温。 虽然前几...
    99+
    2022-12-19
    Python天气预报系统 Python天气预报
  • Python怎么实现天气预报系统
    这篇“Python怎么实现天气预报系统”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python怎么实现天气预报系统”文章吧...
    99+
    2023-07-04
  • Vue入门实战之天气预报
    本文实例为大家分享了Vue实现天气预报的具体代码,供大家参考,具体内容如下 效果图 实现代码 <!DOCTYPE html> <html lang="en"&...
    99+
    2024-04-02
  • python怎么实现播报天气预报
    要实现播报天气预报,可以使用Python的语音合成库,如pyttsx3或gTTS。下面是使用pyttsx3库的示例代码:```pyt...
    99+
    2023-08-31
    python
  • Vue实现天气预报功能
    本文为大家分享了Vue实现天气预报功能的具体代码,供大家参考,具体内容如下 1、功能描述 在搜索框中输入城市,下方出现今天及未来四天的天气情况。搜索框下面固定了几个城市,点击可以快速...
    99+
    2024-04-02
  • Vue实现天气预报小应用
    这是本人在自学vue框架时候所模仿的一个网站,可以查询一些城市的天气情况,大家可以看看: html代码 <!DOCTYPE html> <html lang="...
    99+
    2024-04-02
  • Android简单实现天气预报App
    本文实例为大家分享了Android简单实现天气预报App的具体代码,供大家参考,具体内容如下 一、UI设计 首页UI <xml version="1.0" encoding="...
    99+
    2024-04-02
  • python如何实现将天气预报可视化
    这篇文章将为大家详细讲解有关python如何实现将天气预报可视化,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。结果展示其中:红线代表当天最高气温,蓝线代表最低气温,最高气温点上的标注为当天的天气情况。如果...
    99+
    2023-06-22
  • [Python实战]Python制作天气
    来源:Python高效编程作者:flywind以前,公众号分享了如何使用 PyQt5 制作猜数游戏和计时器,这一次,我们继续学习:如何使用 PyQt5 制作天气查询软件。开发环境Python3PyQt5requests准备工作首先要获取不同...
    99+
    2023-01-31
    实战 天气 Python
  • node.js 中国天气预报 简单实现
    var request = require('request') var url = 'http://www.baidu.com/home/xman/data/superload' var cooki...
    99+
    2022-06-04
    中国 天气预报 简单
  • 怎么用jQuery ajax实现天气预报
    这篇文章主要介绍“怎么用jQuery ajax实现天气预报”,在日常操作中,相信很多人在怎么用jQuery ajax实现天气预报问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2024-04-02
  • AJAX怎么实现天气预报功能
    这篇文章主要介绍“AJAX怎么实现天气预报功能”,在日常操作中,相信很多人在AJAX怎么实现天气预报功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”AJAX怎么实现天气预报...
    99+
    2024-04-02
  • Python+PyQt5+MySQL实现天气管理系统
    在本篇博客中,我利用Python语言其编写界面库PyQt5,然后通过连接MySQL数据库,实现了一个简单的天气管理小系统,该系统包含简单的增删查改四个主要功能。本文旨在解析实现的程序,能够让读者快速了解PyQt5图形...
    99+
    2022-05-21
    Python PyQt5 MySQL 天气管理系统
  • 利用Java实现天气预报播报功能
    目录实验代码WeatherState.javaWeather.javaWeatherForecast.javaCloudyLittleState.javaCloudyDayState...
    99+
    2024-04-02
  • HTML、CSS和JavaScript实现简单天气预报
    使用HTML、CSS和JavaScript实现简单天气预报的步骤: 首先需要获取天气API的数据,可以通过向第三方天气数据服务商发送HTTP请求来获取数据。例如,可以使用Yahoo Weather API或OpenWeatherMap A...
    99+
    2023-08-31
    javascript 前端 html vue.js
  • Java实战之仿天猫商城系统的实现
    目录一、项目介绍二、项目运行三、效果图四、核心代码权限基础控制层用户信息操作控制层用户订单控制层后台管理员品类控制层后台管理-产品页控制层一、项目介绍 迷你天猫商城是一个基于SSM框...
    99+
    2024-04-02
  • Java实战之火车票预订系统的实现
    目录 一、项目运行二、效果图三、核心代码个人中心Controller管理员和员工登陆控制用户管理操作 一、项目运行 环境配置: Jdk1.8 + Tomcat8....
    99+
    2024-04-02
  • 怎么利用Java实现天气预报播报功能
    本文小编为大家详细介绍“怎么利用Java实现天气预报播报功能”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么利用Java实现天气预报播报功能”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。实验代码Weather...
    99+
    2023-07-02
  • Python实战之异步获取中国天气信息
    目录前言目标请求格式请求限制requests非异步获取异步获取系统上限编码前言 本来是想要更新scrapy的,但是怎么说呢,这玩意不难,看着官方文档,基本上就能做,主要是前面的如果你...
    99+
    2024-04-02
  • Android 简易版天气预报app的实现(改进版)
    需要技术支持的可以联系我QQ:1990724437 最近总是有人来和我说我以前写的一个小app无法正常获取数据~Android简易版天气预报ap...
    99+
    2022-06-06
    天气 app Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作