中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

網(wǎng)站團購報名怎么做整站seo排名外包

網(wǎng)站團購報名怎么做,整站seo排名外包,html5在網(wǎng)站建設(shè)中的,dede建設(shè)網(wǎng)站教程文件和異常 在實際開發(fā)中,常常需要對程序中的數(shù)據(jù)進行持久化操作,而實現(xiàn)數(shù)據(jù)持久化最直接簡單的方式就是將數(shù)據(jù)保存到文件中。說到“文件”這個詞,可能需要先科普一下關(guān)于文件系統(tǒng)的知識,對于這個概念,維基百科上給出…

文件和異常

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

在Python中實現(xiàn)文件的讀寫操作其實非常簡單,通過Python內(nèi)置的open函數(shù),我們可以指定文件名、操作模式、編碼信息等來獲得操作文件的對象,接下來就可以對文件進行讀寫操作了。這里所說的操作模式是指要打開什么樣的文件(字符文件還是二進制文件)以及做什么樣的操作(讀、寫還是追加),具體的如下表所示。

操作模式具體含義
'r'讀取 (默認)
'w'寫入(會先截斷之前的內(nèi)容)
'x'寫入,如果文件已經(jīng)存在會產(chǎn)生異常
'a'追加,將內(nèi)容寫入到已有文件的末尾
'b'二進制模式
't'文本模式(默認)
'+'更新(既可以讀又可以寫)

下面這張圖來自于菜鳥教程網(wǎng)站,它展示了如果根據(jù)應(yīng)用程序的需要來設(shè)置操作模式。

在這里插入圖片描述

讀寫文本文件

讀取文本文件時,需要在使用open函數(shù)時指定好帶路徑的文件名(可以使用相對路徑或絕對路徑)并將文件模式設(shè)置為'r'(如果不指定,默認值也是'r'),然后通過encoding參數(shù)指定編碼(如果不指定,默認值是None,那么在讀取文件時使用的是操作系統(tǒng)默認的編碼),如果不能保證保存文件時使用的編碼方式與encoding參數(shù)指定的編碼方式是一致的,那么就可能因無法解碼字符而導(dǎo)致讀取失敗。下面的例子演示了如何讀取一個純文本文件。

def main():f = open('致橡樹.txt', 'r', encoding='utf-8')print(f.read())f.close()if __name__ == '__main__':main()

請注意上面的代碼,如果open函數(shù)指定的文件并不存在或者無法打開,那么將引發(fā)異常狀況導(dǎo)致程序崩潰。為了讓代碼有一定的健壯性和容錯性,我們可以使用Python的異常機制對可能在運行時發(fā)生狀況的代碼進行適當(dāng)?shù)奶幚?#xff0c;如下所示。

def main():f = Nonetry:f = open('致橡樹.txt', 'r', encoding='utf-8')print(f.read())except FileNotFoundError:print('無法打開指定的文件!')except LookupError:print('指定了未知的編碼!')except UnicodeDecodeError:print('讀取文件時解碼錯誤!')finally:if f:f.close()if __name__ == '__main__':main()

在Python中,我們可以將那些在運行時可能會出現(xiàn)狀況的代碼放在try代碼塊中,在try代碼塊的后面可以跟上一個或多個except來捕獲可能出現(xiàn)的異常狀況。例如在上面讀取文件的過程中,文件找不到會引發(fā)FileNotFoundError,指定了未知的編碼會引發(fā)LookupError,而如果讀取文件時無法按指定方式解碼會引發(fā)UnicodeDecodeError,我們在try后面跟上了三個except分別處理這三種不同的異常狀況。最后我們使用finally代碼塊來關(guān)閉打開的文件,釋放掉程序中獲取的外部資源,由于finally塊的代碼不論程序正常還是異常都會執(zhí)行到(甚至是調(diào)用了sys模塊的exit函數(shù)退出Python環(huán)境,finally塊都會被執(zhí)行,因為exit函數(shù)實質(zhì)上是引發(fā)了SystemExit異常),因此我們通常把finally塊稱為“總是執(zhí)行代碼塊”,它最適合用來做釋放外部資源的操作。如果不愿意在finally代碼塊中關(guān)閉文件對象釋放資源,也可以使用上下文語法,通過with關(guān)鍵字指定文件對象的上下文環(huán)境并在離開上下文環(huán)境時自動釋放文件資源,代碼如下所示。

def main():try:with open('致橡樹.txt', 'r', encoding='utf-8') as f:print(f.read())except FileNotFoundError:print('無法打開指定的文件!')except LookupError:print('指定了未知的編碼!')except UnicodeDecodeError:print('讀取文件時解碼錯誤!')if __name__ == '__main__':main()

除了使用文件對象的read方法讀取文件之外,還可以使用for-in循環(huán)逐行讀取或者用readlines方法將文件按行讀取到一個列表容器中,代碼如下所示。

import timedef main():# 一次性讀取整個文件內(nèi)容with open('致橡樹.txt', 'r', encoding='utf-8') as f:print(f.read())# 通過for-in循環(huán)逐行讀取with open('致橡樹.txt', mode='r') as f:for line in f:print(line, end='')time.sleep(0.5)print()# 讀取文件按行讀取到列表中with open('致橡樹.txt') as f:lines = f.readlines()print(lines)if __name__ == '__main__':main()

要將文本信息寫入文件文件也非常簡單,在使用open函數(shù)時指定好文件名并將文件模式設(shè)置為'w'即可。注意如果需要對文件內(nèi)容進行追加式寫入,應(yīng)該將模式設(shè)置為'a'。如果要寫入的文件不存在會自動創(chuàng)建文件而不是引發(fā)異常。下面的例子演示了如何將1-9999直接的素數(shù)分別寫入三個文件中(1-99之間的素數(shù)保存在a.txt中,100-999之間的素數(shù)保存在b.txt中,1000-9999之間的素數(shù)保存在c.txt中)。

from math import sqrtdef is_prime(n):"""判斷素數(shù)的函數(shù)"""assert n > 0for factor in range(2, int(sqrt(n)) + 1):if n % factor == 0:return Falsereturn True if n != 1 else Falsedef main():filenames = ('a.txt', 'b.txt', 'c.txt')fs_list = []try:for filename in filenames:fs_list.append(open(filename, 'w', encoding='utf-8'))for number in range(1, 10000):if is_prime(number):if number < 100:fs_list[0].write(str(number) + '\n')elif number < 1000:fs_list[1].write(str(number) + '\n')else:fs_list[2].write(str(number) + '\n')except IOError as ex:print(ex)print('寫文件時發(fā)生錯誤!')finally:for fs in fs_list:fs.close()print('操作完成!')if __name__ == '__main__':main()

讀寫二進制文件

知道了如何讀寫文本文件要讀寫二進制文件也就很簡單了,下面的代碼實現(xiàn)了復(fù)制圖片文件的功能。

def main():try:with open('guido.jpg', 'rb') as fs1:data = fs1.read()print(type(data))  # <class 'bytes'>with open('吉多.jpg', 'wb') as fs2:fs2.write(data)except FileNotFoundError as e:print('指定的文件無法打開.')except IOError as e:print('讀寫文件時出現(xiàn)錯誤.')print('程序執(zhí)行結(jié)束.')if __name__ == '__main__':main()

讀寫JSON文件

通過上面的講解,我們已經(jīng)知道如何將文本數(shù)據(jù)和二進制數(shù)據(jù)保存到文件中,那么這里還有一個問題,如果希望把一個列表或者一個字典中的數(shù)據(jù)保存到文件中又該怎么做呢?答案是將數(shù)據(jù)以JSON格式進行保存。JSON是“JavaScript Object Notation”的縮寫,它本來是JavaScript語言中創(chuàng)建對象的一種字面量語法,現(xiàn)在已經(jīng)被廣泛的應(yīng)用于跨平臺跨語言的數(shù)據(jù)交換,原因很簡單,因為JSON也是純文本,任何系統(tǒng)任何編程語言處理純文本都是沒有問題的。目前JSON基本上已經(jīng)取代了XML作為異構(gòu)系統(tǒng)間交換數(shù)據(jù)的事實標(biāo)準(zhǔn)。關(guān)于JSON的知識,更多的可以參考JSON的官方網(wǎng)站,從這個網(wǎng)站也可以了解到每種語言處理JSON數(shù)據(jù)格式可以使用的工具或三方庫,下面是一個JSON的簡單例子。

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

可能大家已經(jīng)注意到了,上面的JSON跟Python中的字典其實是一樣一樣的,事實上JSON的數(shù)據(jù)類型和Python的數(shù)據(jù)類型是很容易找到對應(yīng)關(guān)系的,如下面兩張表所示。

JSONPython
objectdict
arraylist
stringstr
number (int / real)int / float
true / falseTrue / False
nullNone
PythonJSON
dictobject
list, tuplearray
strstring
int, float, int- & float-derived Enumsnumber
True / Falsetrue / false
Nonenull

我們使用Python中的json模塊就可以將字典或列表以JSON格式保存到文件中,代碼如下所示。

import jsondef main():mydict = {'name': '駱昊','age': 38,'qq': 957658,'friends': ['王大錘', '白元芳'],'cars': [{'brand': 'BYD', 'max_speed': 180},{'brand': 'Audi', 'max_speed': 280},{'brand': 'Benz', 'max_speed': 320}]}try:with open('data.json', 'w', encoding='utf-8') as fs:json.dump(mydict, fs)except IOError as e:print(e)print('保存數(shù)據(jù)完成!')if __name__ == '__main__':main()

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

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

這里出現(xiàn)了兩個概念,一個叫序列化,一個叫反序列化。自由的百科全書維基百科上對這兩個概念是這樣解釋的:“序列化(serialization)在計算機科學(xué)的數(shù)據(jù)處理中,是指將數(shù)據(jù)結(jié)構(gòu)或?qū)ο鬆顟B(tài)轉(zhuǎn)換為可以存儲或傳輸?shù)男问?#xff0c;這樣在需要的時候能夠恢復(fù)到原先的狀態(tài),而且通過序列化的數(shù)據(jù)重新獲取字節(jié)時,可以利用這些字節(jié)來產(chǎn)生原始對象的副本(拷貝)。與這個過程相反的動作,即從一系列字節(jié)中提取數(shù)據(jù)結(jié)構(gòu)的操作,就是反序列化(deserialization)”。

目前絕大多數(shù)網(wǎng)絡(luò)數(shù)據(jù)服務(wù)(或稱之為網(wǎng)絡(luò)API)都是基于HTTP協(xié)議提供JSON格式的數(shù)據(jù),關(guān)于HTTP協(xié)議的相關(guān)知識,可以看看阮一峰老師的《HTTP協(xié)議入門》,如果想了解國內(nèi)的網(wǎng)絡(luò)數(shù)據(jù)服務(wù),可以看看聚合數(shù)據(jù)和阿凡達數(shù)據(jù)等網(wǎng)站,國外的可以看看{API}Search網(wǎng)站。下面的例子演示了如何使用requests模塊(封裝得足夠好的第三方網(wǎng)絡(luò)訪問模塊)訪問網(wǎng)絡(luò)API獲取國內(nèi)新聞,如何通過json模塊解析JSON數(shù)據(jù)并顯示新聞標(biāo)題,這個例子使用了天行數(shù)據(jù)提供的國內(nèi)新聞數(shù)據(jù)接口,其中的APIKey需要自己到該網(wǎng)站申請。

import requests
import jsondef main():resp = requests.get('http://api.tianapi.com/guonei/?key=APIKey&num=10')data_model = json.loads(resp.text)for news in data_model['newslist']:print(news['title'])if __name__ == '__main__':main()

在Python中要實現(xiàn)序列化和反序列化除了使用json模塊之外,還可以使用pickle和shelve模塊,但是這兩個模塊是使用特有的序列化協(xié)議來序列化數(shù)據(jù),因此序列化后的數(shù)據(jù)只能被Python識別。關(guān)于這兩個模塊的相關(guān)知識可以自己看看網(wǎng)絡(luò)上的資料。另外,如果要了解更多的關(guān)于Python異常機制的知識,可以看看segmentfault上面的文章《總結(jié):Python中的異常處理》,這篇文章不僅介紹了Python中異常機制的使用,還總結(jié)了一系列的最佳實踐,很值得一讀。

http://www.risenshineclean.com/news/49244.html

相關(guān)文章:

  • wordpress 前臺注冊seo排名優(yōu)化哪家好
  • 機票特價網(wǎng)站建設(shè)seo咨詢解決方案
  • 增城微網(wǎng)站建設(shè)企業(yè)營銷模式
  • 互聯(lián)網(wǎng)運營網(wǎng)站免費網(wǎng)絡(luò)推廣網(wǎng)址
  • 一家專門做開網(wǎng)店的網(wǎng)站西安百度seo代理
  • 怎么建立自己的站點上海網(wǎng)站建設(shè)開發(fā)
  • 上海推廣網(wǎng)站長沙網(wǎng)絡(luò)推廣公司
  • 北京做網(wǎng)站公司有哪些百度搜索官網(wǎng)
  • 特價網(wǎng)站建設(shè)官網(wǎng)阿里云域名注冊入口
  • 好搜客網(wǎng)站如何推廣app
  • 安徽區(qū)塊鏈虛擬幣網(wǎng)站開發(fā)方案濟南網(wǎng)站自然優(yōu)化
  • 無錫高端網(wǎng)站設(shè)計建設(shè)seo優(yōu)化軟件大全
  • 怎么做網(wǎng)站旅游宣傳第三波疫情將全面大爆發(fā)
  • 東莞公司網(wǎng)站建設(shè)seo推廣需要多少錢
  • 安溪縣住房和城鄉(xiāng)規(guī)劃建設(shè)網(wǎng)站銷售平臺排名
  • 門戶網(wǎng)站標(biāo)題居中加大百度搜索 手機
  • 教做黏土手工的網(wǎng)站企業(yè)網(wǎng)絡(luò)推廣計劃
  • 鄭州網(wǎng)站推廣外包地址品牌營銷策略分析論文
  • 做關(guān)于家鄉(xiāng)的網(wǎng)站國內(nèi)搜索引擎大全
  • 做企業(yè)網(wǎng)站推廣多少錢ciliba磁力搜索引擎
  • 南京企業(yè)網(wǎng)站建設(shè)網(wǎng)絡(luò)推廣優(yōu)化網(wǎng)站
  • 中國循環(huán)經(jīng)濟網(wǎng)站開發(fā)與設(shè)計傳媒公司
  • 網(wǎng)站模板庫軟件系統(tǒng)優(yōu)化是什么意思
  • 專業(yè)做淘寶網(wǎng)站紹興小廣告網(wǎng)站
  • java web網(wǎng)站建設(shè)關(guān)鍵詞優(yōu)化分析工具
  • 網(wǎng)站地圖怎么做XMLaso優(yōu)化前景
  • 山東聊城建設(shè)學(xué)校官網(wǎng)企業(yè)seo關(guān)鍵字優(yōu)化
  • 站長工具seo下載推客平臺
  • 手機上自己做網(wǎng)站嗎關(guān)鍵詞提取工具app
  • 企業(yè)網(wǎng)站流程圖開網(wǎng)站需要什么流程