第五章 對(duì)象帶你飛

5.1 存儲(chǔ)

5.1.1 文件

①打開(kāi)

如果Python程序運(yùn)行結(jié)束,那么分配給這個(gè)程序的內(nèi)存空間也會(huì)清空。為了長(zhǎng)期持續(xù)地存儲(chǔ),Python必須把數(shù)據(jù)存儲(chǔ)在磁盤(pán)中。如果把數(shù)據(jù)儲(chǔ)存在磁盤(pán)中,即使斷電或程序結(jié)束,數(shù)據(jù)依然存在。

在Python中,我們可以通過(guò)內(nèi)置函數(shù)open來(lái)創(chuàng)建文件對(duì)象。在調(diào)用open時(shí),需要說(shuō)明文件名,以及打開(kāi)文件的方式:

f=open(文件名,方式)

文件名是文件存在于磁盤(pán)的名字,打開(kāi)文件的常用方式有:

"r" # 讀取已經(jīng)存在的文件

?"w" # 新建文件,并寫(xiě)入

?"a" # 如果文件存在,那么寫(xiě)入到文件的結(jié)尾。如果文件不存在,則新建文件并寫(xiě)入

②修改

content = f.read(10)? ? ? ? # 讀取10個(gè)字節(jié)的數(shù)據(jù)?

content = f.readline()? ? ? # 讀取一行?

content = f.readlines()? ? ? # 讀取所有行,儲(chǔ)存在列表中,每個(gè)元素是一行。

如果想寫(xiě)入一行,則需要在字符串末尾加上換行符。在UNIX系統(tǒng)中,換行符 為"\n"。在Windows系統(tǒng)中,換行符為"\r\n"。

完成后close

5.1.2 上下文管理器

上下文管理器可以在不需要文件的時(shí)候,自動(dòng)關(guān)閉文件。

①一般語(yǔ)法

# 常規(guī)文件操作

f = open("new.txt", "w")?

print(f.closed) # 檢查文件是否打開(kāi)?

f.write("Hello World!")?

f.close()?

?print(f.closed) # 打印True

②上下文管理器

# 使用上下文管理器?

with open("new.txt", "w") as f:?

? ? ? ? f.write("Hello World!")?

?print(f.closed)

任何定義了__enter__()方法和__exit__()方法的對(duì)象都可以用于上下文管理 器。下面,我們自定義一個(gè)類(lèi)Vow,并定義它的__enter__()方法和__exit__()方 法。因此,由Vow類(lèi)的對(duì)象可以用于上下文管理器:

class Vow(object):? ??

? ?def __init__(self, text):? ? ? ??

? ? ? ? self.text = text? ??

? ?def __enter__(self):? ? ? ??

? ? ? ? self.text = "I say: " + self.text? ? # 增加前綴? ? ? ??

? ? ? ? return self? ? ? ? ? ? ? ? ? ? ? ? ? # 返回一個(gè)對(duì)象? ??

? def __exit__(self,exc_type,exc_value,traceback):? ? ? ??

? ? ? ?self.text = self.text + "!"? ? ? ? ? #增加后綴? ??

? with Vow("I'm fine") as myVow:? ??

? ? ? ? print(myVow.text)? ??

print(myVow.text)

5.1.3 pickle 包

通過(guò)pickle包,我們可以把某個(gè)對(duì)象保存下來(lái),再存成磁盤(pán)里的文 件。

實(shí)際上,對(duì)象的存儲(chǔ)分為兩步。第一步,我們將對(duì)象在內(nèi)存中的數(shù)據(jù)直接抓取 出來(lái),轉(zhuǎn)換成一個(gè)有序的文本,即所謂的序列化。第二步,將 文本存入文件。等到需要時(shí),我們從文件中讀出文本,再放入內(nèi)存,就可以獲得原 有的對(duì)象。下面是一個(gè)具體的例子,

①首先是第一步序列化,將內(nèi)存中的對(duì)象轉(zhuǎn)換為文本流:

import pickle? ? ?

class Bird(object):

? ? ?have_feather = True? ? ?

? ? ?reproduction_method? = "egg"? ??

? ? ?summer? ? ? ? = Bird()? ? ? ? ? ? ? ? ?# 創(chuàng)建對(duì)象

? ? ?pickle_string = pickle.dumps(summer)? ?# 序列化對(duì)象

使用pickle包的dumps()方法可以將對(duì)象轉(zhuǎn)換成字符串的形式。隨后我們用字節(jié)文本的存儲(chǔ)方法,將該字符串儲(chǔ)存在文件。繼續(xù)第二步:

with open("summer.pkl", "wb") as f:?

? ? ? ?f.write(pickle_string)

我們可以使用 dump()的方法,一次完成兩步:

import pickle

class Bird(object):?

? ? have_feather = True?

? ? reproduction_method = "egg"?

?summer = Bird()?

?with open("summer.pkl", "w") as f:?

? ? ?pickle.dump(summer, f) # 序列化并保存對(duì)象

5.2? 一寸光陰

5.2.1? time包

標(biāo)準(zhǔn)庫(kù)的time包提供了基本的時(shí)間 功能。下面使用time包:

①clock

import time start = time.clock()?

for i in range(100000):

? ? print(i**2)? ??

end = time.clock()?

print(end - start)

②sleep

方法sleep()可以讓程序休眠。根據(jù)sleep()接收到的參數(shù),程序會(huì)在某時(shí)間間 隔之后醒來(lái)繼續(xù)運(yùn)行:

import time?

print("start")?

time.sleep(10) # 休眠10秒?

print("wake up")

time包還定義了struct_time對(duì)象。該對(duì)象將掛鐘時(shí)間轉(zhuǎn)換為年、月、日、 時(shí)、分、秒等,存儲(chǔ)在該對(duì)象的各個(gè)屬性中,比如tm_year、tm_mon、tm_mday…… 下面幾種方法可以將掛鐘時(shí)間轉(zhuǎn)換為struct_time對(duì)象:

st = time.gmtime() #返回struct_time格式的UTC時(shí)間?

st = time.localtime() #返回struct_time格式的當(dāng)?shù)貢r(shí)間,當(dāng)?shù)貢r(shí)區(qū)根據(jù)系 #統(tǒng)環(huán)境決定

我們也可以反過(guò)來(lái),把一個(gè)struct_time對(duì)象轉(zhuǎn)換為time對(duì)象:

s = time.mktime(st) # 將struct_time格式轉(zhuǎn)換成掛鐘時(shí)間

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 5.1 存儲(chǔ) 5.1.1 文件 內(nèi)存存儲(chǔ):當(dāng)電腦斷電時(shí),內(nèi)存中的數(shù)據(jù)就會(huì)消失。另一方面,如果Python程序運(yùn)行結(jié)...
    SibyLtuI閱讀 208評(píng)論 0 0
  • 寫(xiě)在前面的話 代碼中的# > 表示的是輸出結(jié)果 輸入 使用input()函數(shù) 用法 注意input函數(shù)輸出的均是字...
    FlyingLittlePG閱讀 3,208評(píng)論 0 9
  • 高階函數(shù):將函數(shù)作為參數(shù) sortted()它還可以接收一個(gè)key函數(shù)來(lái)實(shí)現(xiàn)自定義的排序,reversec參數(shù)可反...
    royal_47a2閱讀 834評(píng)論 0 0
  • 七絕?釣意 文/隴上瓜牛 漫畫(huà)斜陽(yáng)疊嶺中, 半江瑟瑟半天紅。 征鴻隱匿人歸后, 夢(mèng)入漁舟一放翁。 2019.5.2...
    寡瓜牛閱讀 491評(píng)論 4 6
  • 對(duì)外漢語(yǔ)教師面試,7月7日,單位上讓自己上交2400元,通過(guò)報(bào)一半1200. 這筆錢(qián)2400,大家都在躊躇著,有三...
    朋友zcl閱讀 192評(píng)論 2 4

友情鏈接更多精彩內(nèi)容