day-013--文件和異常

文件和異常

文件和異常我再前面已經(jīng)搞了一波了慧域,這個(gè)是大神的順序,我把傳送門放這

文件傳送門
異常傳送門

大概放些概念和補(bǔ)充知識(shí)在下面

1. 文件

在實(shí)際開發(fā)中窿撬,常常需要對(duì)程序中的數(shù)據(jù)進(jìn)行持久化操作,而實(shí)現(xiàn)數(shù)據(jù)持久化最直接簡單的方式就是將數(shù)據(jù)保存到文件中展融。說到“文件”這個(gè)詞寞射,可能需要先科普一下關(guān)于文件系統(tǒng)的知識(shí)渔工,對(duì)于這個(gè)概念,維基百科上給出了很好的詮釋桥温,這里不再浪費(fèi)筆墨引矩。

2. 異常

為了讓代碼有一定的健壯性和容錯(cuò)性,我們可以使用Python的異常機(jī)制對(duì)可能在運(yùn)行時(shí)發(fā)生狀況的代碼進(jìn)行適當(dāng)?shù)奶幚砬纸赑ython中旺韭,我們可以將那些在運(yùn)行時(shí)可能會(huì)出現(xiàn)狀況的代碼放在try代碼塊中,在try代碼塊的后面可以跟上一個(gè)或多個(gè)except來捕獲可能出現(xiàn)的異常狀況掏觉。例如在上面讀取文件的過程中区端,文件找不到會(huì)引發(fā)FileNotFoundError,指定了未知的編碼會(huì)引發(fā)LookupError澳腹,而如果讀取文件時(shí)無法按指定方式解碼會(huì)引發(fā)UnicodeDecodeError织盼,我們?cè)趖ry后面跟上了三個(gè)except分別處理這三種不同的異常狀況。最后我們使用finally代碼塊來關(guān)閉打開的文件酱塔,釋放掉程序中獲取的外部資源沥邻,由于finally塊的代碼不論程序正常還是異常都會(huì)執(zhí)行到(甚至是調(diào)用了sys模塊的exit函數(shù)退出Python環(huán)境,finally塊都會(huì)被執(zhí)行羊娃,因?yàn)閑xit函數(shù)實(shí)質(zhì)上是引發(fā)了SystemExit異常)唐全,因此我們通常把finally塊稱為“總是執(zhí)行代碼塊”,它最適合用來做釋放外部資源的操作蕊玷。如果不愿意在finally代碼塊中關(guān)閉文件對(duì)象釋放資源邮利,也可以使用上下文語法,通過with關(guān)鍵字指定文件對(duì)象的上下文環(huán)境并在離開上下文環(huán)境時(shí)自動(dòng)釋放文件資源
詳細(xì)的看上面異常的傳送門

3. json

這是個(gè)好東東垃帅,大部分可見的配置呀延届,http的協(xié)議,基本上都是json協(xié)議挺智,所以這個(gè)是要學(xué)習(xí)一下:
json的字符串長這個(gè)樣子:

{
    "name": "駱昊",
    "age": 38,
    "qq": 957658,
    "friends": ["王大錘", "白元芳"],
    "cars": [
        {"brand": "BYD", "max_speed": 180},
        {"brand": "Audi", "max_speed": 280},
        {"brand": "Benz", "max_speed": 320}
    ]
}

可以通過在線網(wǎng)站校驗(yàn)json格式有沒有問題
傳送門

剛開始是這樣

image.png

正確的是這樣的

image.png

錯(cuò)誤的是這樣的

image.png

會(huì)有提示祷愉,照著改就是了

3.1 json 和python格式對(duì)應(yīng)關(guān)系

JSON Python
object dict
array list
string str
number (int / real) int / float
true / false True / False
null None
Python JSON
dict object
list, tuple array
str string
int, float, int- & float-derived Enums number
True / False true / false
None null

python 里有個(gè)json模塊提供給我們用來json格式華操作窗宦,

json模塊主要有四個(gè)比較重要的函數(shù)赦颇,分別是:

  • dump - 將Python對(duì)象按照J(rèn)SON格式序列化到文件中
  • dumps - 將Python對(duì)象處理成JSON格式的字符串
  • load - 將文件中的JSON數(shù)據(jù)反序列化成對(duì)象
  • loads - 將字符串的內(nèi)容反序列化成Python對(duì)象

實(shí)際操作一波:


import json

dict = {
    "name": "駱昊",
    "age": 38,
    "qq": 957658,
    "friends": ["王大錘", "白元芳"],
    "cars": [
        {"brand": "BYD", "max_speed": 180},
        {"brand": "Audi", "max_speed": 280},
        {"brand": "Benz", "max_speed": 320}
    ]
}
dict2 = {
    123:123
}
json_str = json.dumps(dict,ensure_ascii=False)
print(json_str)
load_str = json.loads(json_str)
print(load_str)
with open('json.txt','w',encoding='utf-8') as fjson:
    json.dump(dict,fjson,ensure_ascii=False)
    fjson.write('\n')
    json.dump(dict2, fjson)

with open('json.txt','r',encoding='utf-8') as fjson_r:
   for line in fjson_r:
       print(line)
       load_str = json.loads(line)
       print('load_str',load_str)

結(jié)果:

E:\learn100day\venv\Scripts\python.exe E:/learn100day/day013_home.py
{"name": "駱昊", "age": 38, "qq": 957658, "friends": ["王大錘", "白元芳"], "cars": [{"brand": "BYD", "max_speed": 180}, {"brand": "Audi", "max_speed": 280}, {"brand": "Benz", "max_speed": 320}]}
{'name': '駱昊', 'age': 38, 'qq': 957658, 'friends': ['王大錘', '白元芳'], 'cars': [{'brand': 'BYD', 'max_speed': 180}, {'brand': 'Audi', 'max_speed': 280}, {'brand': 'Benz', 'max_speed': 320}]}
{"name": "駱昊", "age": 38, "qq": 957658, "friends": ["王大錘", "白元芳"], "cars": [{"brand": "BYD", "max_speed": 180}, {"brand": "Audi", "max_speed": 280}, {"brand": "Benz", "max_speed": 320}]}

load_str {'name': '駱昊', 'age': 38, 'qq': 957658, 'friends': ['王大錘', '白元芳'], 'cars': [{'brand': 'BYD', 'max_speed': 180}, {'brand': 'Audi', 'max_speed': 280}, {'brand': 'Benz', 'max_speed': 320}]}
{"123": 123}
load_str {'123': 123}

文件里:

image.png

搞這個(gè)東東,中英文赴涵,還有一個(gè)文件多個(gè)json的時(shí)候媒怯,得注意

3.2 http請(qǐng)求中使用到的json

這里找了個(gè)請(qǐng)求天氣的接口,返回的是json髓窜,千萬不要死循環(huán)請(qǐng)求扇苞,會(huì)被關(guān)在小黑屋子里的欺殿。。鳖敷。
請(qǐng)求http 用的requests模塊脖苏,接口的傳送門

直接上代碼,只能查詢城市的定踱,省的查不了棍潘,縣及其一下查不了。崖媚。亦歉。

import json
import requests

dict = {}
with open('city.json','r',encoding='utf-8') as fcity:
    json_str = json.load(fcity)
    for perjson in json_str:
        # print(perjson)
        dict[perjson['city_name']] = perjson['city_code']
# for key in dict.keys():
    #print(key, ':', dict[key])

while True:
    # inpuit_str = input('請(qǐng)輸入要查詢城市的天氣:')
    inpuit_str = '北京'
    city_str = str(inpuit_str)
    if city_str in dict.keys():
        pass
        code_str = dict[city_str]
        if code_str is '':
            print('請(qǐng)輸入具體城市,不要輸入省份畅哑!')
        else:
            http_str = 'http://t.weather.sojson.com/api/weather/city/' + code_str
            print(http_str)
            resp = requests.get(http_str)
            data_model = json.loads(resp.text)
            # print(data_model)
            json_data = data_model['data']
            # print(json_data)
            json_forecast = json_data['forecast']
            print(city_str,'今天天氣:', json_forecast[0]['type'],', 風(fēng)向:',json_forecast[0]['fx'], ', 風(fēng)力:',
                  json_forecast[0]['fl'], '肴楷,溫度:', json_forecast[0]['high'], ',', json_forecast[0]['low'] )
            exit(0)
    else:
        print('輸入有誤請(qǐng)重新輸入荠呐!')

請(qǐng)輸入要查詢城市的天氣:kunshan
輸入有誤請(qǐng)重新輸入赛蔫!
請(qǐng)輸入要查詢城市的天氣:昆山
輸入有誤請(qǐng)重新輸入!
請(qǐng)輸入要查詢城市的天氣:蘇州
http://t.weather.sojson.com/api/weather/city/101190401
蘇州 今天天氣: 多云 , 風(fēng)向: 西北風(fēng) , 風(fēng)力: <3級(jí) 直秆,溫度: 高溫 32.0℃ 濒募, 低溫 26.0℃

city.json 去這兒下載:鏈接: https://pan.baidu.com/s/1JFAwnH2MRLc5OD3hsJZwGQ 提取碼: u8sk
如果鏈接失效就去網(wǎng)站看看,不行就聯(lián)系我圾结。瑰剃。。下載之后名字改成city.json筝野,和python文件一個(gè)目錄就行

文集傳送門 學(xué)習(xí)python100天


整個(gè)學(xué)習(xí)python100天的目錄傳送門


無敵分割線


再最后面附上大神的鏈接
傳送門

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末晌姚,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子歇竟,更是在濱河造成了極大的恐慌挥唠,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件焕议,死亡現(xiàn)場離奇詭異宝磨,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)盅安,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門唤锉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人别瞭,你說我怎么就攤上這事窿祥。” “怎么了蝙寨?”我有些...
    開封第一講書人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵晒衩,是天一觀的道長嗤瞎。 經(jīng)常有香客問我,道長听系,這世上最難降的妖魔是什么贝奇? 我笑而不...
    開封第一講書人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮靠胜,結(jié)果婚禮上弃秆,老公的妹妹穿的比我還像新娘。我一直安慰自己髓帽,他們只是感情好菠赚,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著郑藏,像睡著了一般衡查。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上必盖,一...
    開封第一講書人閱讀 51,190評(píng)論 1 299
  • 那天拌牲,我揣著相機(jī)與錄音,去河邊找鬼歌粥。 笑死塌忽,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的失驶。 我是一名探鬼主播土居,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼嬉探!你這毒婦竟也來了擦耀?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤涩堤,失蹤者是張志新(化名)和其女友劉穎眷蜓,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體胎围,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡吁系,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了白魂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片汽纤。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖碧聪,靈堂內(nèi)的尸體忽然破棺而出冒版,到底是詐尸還是另有隱情液茎,我是刑警寧澤逞姿,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布辞嗡,位于F島的核電站,受9級(jí)特大地震影響滞造,放射性物質(zhì)發(fā)生泄漏续室。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一谒养、第九天 我趴在偏房一處隱蔽的房頂上張望挺狰。 院中可真熱鬧,春花似錦买窟、人聲如沸丰泊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瞳购。三九已至,卻和暖如春亏推,著一層夾襖步出監(jiān)牢的瞬間学赛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來泰國打工吞杭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留盏浇,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓芽狗,卻偏偏與公主長得像绢掰,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子童擎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Python語言特性 1 Python的函數(shù)參數(shù)傳遞 看兩個(gè)如下例子曼月,分析運(yùn)行結(jié)果: 代碼一: a = 1 def...
    時(shí)光清淺03閱讀 486評(píng)論 0 0
  • Python語言特性 1 Python的函數(shù)參數(shù)傳遞 看兩個(gè)如下例子,分析運(yùn)行結(jié)果: 代碼一: a = 1 def...
    伊森H閱讀 3,062評(píng)論 0 15
  • 概要 64學(xué)時(shí) 3.5學(xué)分 章節(jié)安排 電子商務(wù)網(wǎng)站概況 HTML5+CSS3 JavaScript Node 電子...
    阿啊阿吖丁閱讀 9,182評(píng)論 0 3
  • 每一個(gè)不曾起舞的日子柔昼,都是對(duì)生命的辜負(fù)哑芹! 文件和異常 在實(shí)際開發(fā)中,常常需要對(duì)程序中的數(shù)據(jù)進(jìn)行持久化操作捕透,而實(shí)現(xiàn)數(shù)...
    月上秦少閱讀 252評(píng)論 0 1
  • 昨晚去超市買酸奶,路上有一對(duì)母子在我身后虎谢,他們的對(duì)話引起了我的注意盟榴。 孩子興奮地對(duì)媽媽說:“今天放學(xué)的時(shí)候,我發(fā)現(xiàn)...
    水墨柒閱讀 135評(píng)論 0 0