最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實(shí)戰(zhàn)之天氣預(yù)報系統(tǒng)的實(shí)現(xiàn)

 更新時間:2022年12月18日 09:45:24   作者:木木子學(xué)python  
本文主要和大家介紹了如何用代碼寫一款Python版天氣預(yù)報系統(tǒng),是Tkinter界面化的,還會制作溫度折線圖跟氣溫餅圖哦!感興趣的小伙伴可以嘗試一下

前言

鼎鼎大名的南方城市長沙很早就入冬了,街上各種大衣,毛衣,棉衣齊齊出動。

這段時間全國各地大風(fēng)嗚嗚地吹,很多地方斷崖式降溫。

雖然前幾天短暫的溫度回升,但肯定是為了今天的超級降溫,一大早的就開始狂風(fēng)四起。

周五早晨,終于體驗(yàn)了一把久違冷冷的冰雨在臉上胡亂的拍!昨天還有10幾度的天氣,今天就  只有2-3°了,真真是老天爺?shù)哪樒呤儈

廣東的朋友們,聽說你們哪兒最低溫度都是10幾度,我實(shí)名羨慕了——(要我說從哪兒聽說的,昨天跟刺激戰(zhàn)場打游戲的合作隊(duì)友哪兒聽說的。狠狠羨慕住了.jpg)

沒啥事兒,跟大家談一談天氣,哈哈哈,今天就給大家用代碼寫一款Python版天氣預(yù)報系統(tǒng),是Tkinter界面化的,還會制作溫度折線圖跟氣溫餅圖哦~一整個期待住了吧!

一、前期準(zhǔn)備

1)運(yùn)行環(huán)境

本文用到的環(huán)境如下——

Python3、Pycharm社區(qū)版,第三方模塊:tkinter、bs4(BeautifulSoup)、pandas、

prettytable、matplotlib、re。部分自帶的庫只要安裝完P(guān)ython就可以直接使用了

一般安裝:pip install +模塊名

鏡像源安裝:pip install -i https://pypi.douban.com/simple/+模塊名

有準(zhǔn)備一些數(shù)據(jù)源素材等這些大家可以用自己準(zhǔn)備的就可以了。

二、代碼展示

#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

    #設(shè)置窗口
    def set_init_window(self):
        self.init_window_name.title("天氣預(yù)報")           #窗口名
        self.init_window_name.geometry('1000x500+200+50')
        #標(biāo)簽
        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="天氣預(yù)測結(jié)果")
        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)  #處理結(jié)果展示
        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)  # 調(diào)用內(nèi)部方法  加()為直接調(diào)用
        self.str_trans_to_md7_button.grid(row=1, column=11)
        self.str_trans_to_img_button = Button(self.init_window_name, text="獲取天氣統(tǒng)計(jì)圖", bg="lightblue", width=10,command=self.str_trans_to_img)  # 調(diào)用內(nèi)部方法  加()為直接調(diào)用
        self.str_trans_to_img_button.grid(row=2, column=11)

    #功能函數(shù)
    def str_trans_to_md7(self):
        #儲存天氣情況的列表
        date,wea,tem_high,tem_low,wind_dire,wind_speed = [],[],[],[],[],[]
        #城市轉(zhuǎn)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 = ['日期','天氣', '最高溫度','最低溫度','風(fēng)向','風(fēng)力']
        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):#進(jìn)行統(tǒng)計(jì)圖的制作
        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 以及l(fā)ows是匹配對應(yīng)的
        plt.fill_between(dates, highs, lows, facecolor='blue', alpha=0.1) # facecolor指定了區(qū)域的顏色
        # 設(shè)置圖形格式
        plt.rcParams['font.sans-serif']=['SimHei'] #顯示中文標(biāo)簽
        plt.rcParams['axes.unicode_minus']=False
        plt.title("近七日溫度", fontsize=24)
        plt.xlabel('', fontsize=14)
        fig.autofmt_xdate() # 讓x軸標(biāo)簽斜著打印避免擁擠
        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()              #實(shí)例化出一個父窗口

    ZMJ_PORTAL = MY_GUI(init_window)
    
    ZMJ_PORTAL.set_init_window()    # 設(shè)置根窗口默認(rèn)屬性

    init_window.mainloop()          #父窗口進(jìn)入事件循環(huán),可以理解為保持窗口運(yùn)行,否則界面不展示


gui_start()

三、效果展示

1)天氣預(yù)報系統(tǒng)

?2)溫度折線圖

3)氣溫餅圖

到此這篇關(guān)于Python實(shí)戰(zhàn)之天氣預(yù)報系統(tǒng)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Python天氣預(yù)報系統(tǒng)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談tensorflow中Dataset圖片的批量讀取及維度的操作詳解

    淺談tensorflow中Dataset圖片的批量讀取及維度的操作詳解

    今天小編就為大家分享一篇淺談tensorflow中Dataset圖片的批量讀取及維度的操作詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • 如何利用python的tkinter實(shí)現(xiàn)一個簡單的計(jì)算器

    如何利用python的tkinter實(shí)現(xiàn)一個簡單的計(jì)算器

    這篇文章主要給大家介紹了關(guān)于如何利用python的tkinter實(shí)現(xiàn)一個簡單的計(jì)算器的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Python操作Excel的學(xué)習(xí)筆記

    Python操作Excel的學(xué)習(xí)筆記

    這篇文章主要介紹了Python操作Excel的學(xué)習(xí)筆記,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • python實(shí)現(xiàn)超簡單的視頻對象提取功能

    python實(shí)現(xiàn)超簡單的視頻對象提取功能

    這篇文章主要給大家介紹了關(guān)于利用python實(shí)現(xiàn)超簡單的視頻對象提取功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-06-06
  • Python必備技巧之字符數(shù)據(jù)操作詳解

    Python必備技巧之字符數(shù)據(jù)操作詳解

    處理字符數(shù)據(jù)是編程不可或缺的一部分。Python?提供了一組豐富的運(yùn)算符、函數(shù)和方法來處理字符串。包括字符串運(yùn)算符、內(nèi)置函數(shù)、索引、切片和內(nèi)置方法。快來學(xué)習(xí)一下吧
    2022-03-03
  • Python自動化處理手機(jī)驗(yàn)證碼

    Python自動化處理手機(jī)驗(yàn)證碼

    手機(jī)驗(yàn)證碼是一種常見的身份驗(yàn)證手段,廣泛應(yīng)用于用戶注冊、登錄、交易確認(rèn)等場景,下面我們來看看如何使用Python自動化處理手機(jī)驗(yàn)證碼吧
    2025-02-02
  • Python在for循環(huán)里處理大數(shù)據(jù)的推薦方法實(shí)例

    Python在for循環(huán)里處理大數(shù)據(jù)的推薦方法實(shí)例

    這篇文章主要介紹了Python在for循環(huán)里處理大數(shù)據(jù)的推薦方法實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Python實(shí)現(xiàn)文件操作幫助類的示例代碼

    Python實(shí)現(xiàn)文件操作幫助類的示例代碼

    在使用Python進(jìn)行業(yè)務(wù)開發(fā)的時候,需要將一些數(shù)據(jù)保存到本地文件存儲,方便后面進(jìn)行數(shù)據(jù)分析展示,本文就來用Python制作一個文件操作幫助類,需要的可以參考一下
    2023-03-03
  • Python web開發(fā)之用Tornado框架制作簡易表白墻網(wǎng)站

    Python web開發(fā)之用Tornado框架制作簡易表白墻網(wǎng)站

    這篇文章將用Python做Web開發(fā)。在Python當(dāng)中,WEB開發(fā)框架主要有三個,本文將利用Tornado框架做一個簡單的表白墻網(wǎng)站,感興趣的可以了解一下
    2022-02-02
  • Python基礎(chǔ)之文件讀取的講解

    Python基礎(chǔ)之文件讀取的講解

    今天小編就為大家分享一篇關(guān)于Python基礎(chǔ)之文件讀取的講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02

最新評論

海门市| 无极县| 时尚| 多伦县| 介休市| 龙里县| 江油市| 图们市| 永胜县| 射阳县| 江西省| 合阳县| 手游| 四川省| 平山县| 哈尔滨市| 北川| 茌平县| 金湖县| 牙克石市| 额尔古纳市| 文安县| 万山特区| 奇台县| 旅游| 洛扎县| 巧家县| 寿宁县| 宁陕县| 安龙县| 扶沟县| 嘉禾县| 乌拉特中旗| 长寿区| 灵寿县| 永顺县| 德令哈市| 儋州市| 鄂托克前旗| 若羌县| 根河市|