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

5.1 存儲(chǔ)

5.1.1 文件

①打開

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

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

f=open(文件名忍捡,方式)

文件名是文件存在于磁盤的名字集漾,打開文件的常用方式有:

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

?"w" # 新建文件,并寫入

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

②修改

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

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

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

如果想寫入一行瞳抓,則需要在字符串末尾加上換行符埃疫。在UNIX系統(tǒng)中,換行符 為"\n"孩哑。在Windows系統(tǒng)中栓霜,換行符為"\r\n"。

完成后close

5.1.2 上下文管理器

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

①一般語法

# 常規(guī)文件操作

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

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

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è)類Vow鹰霍,并定義它的__enter__()方法和__exit__()方 法闻鉴。因此,由Vow類的對(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 包

通過pickle包茂洒,我們可以把某個(gè)對(duì)象保存下來孟岛,再存成磁盤里的文 件。

實(shí)際上督勺,對(duì)象的存儲(chǔ)分為兩步渠羞。第一步,我們將對(duì)象在內(nèi)存中的數(shù)據(jù)直接抓取 出來智哀,轉(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)庫的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í)間間 隔之后醒來繼續(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)境決定

我們也可以反過來第练,把一個(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)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市玛荞,隨后出現(xiàn)的幾起案子娇掏,更是在濱河造成了極大的恐慌,老刑警劉巖勋眯,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件婴梧,死亡現(xiàn)場離奇詭異,居然都是意外死亡客蹋,警方通過查閱死者的電腦和手機(jī)塞蹭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來讶坯,“玉大人番电,你說我怎么就攤上這事×纠牛” “怎么了漱办?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長涎跨。 經(jīng)常有香客問我洼冻,道長崭歧,這世上最難降的妖魔是什么隅很? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮率碾,結(jié)果婚禮上叔营,老公的妹妹穿的比我還像新娘。我一直安慰自己所宰,他們只是感情好绒尊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著仔粥,像睡著了一般婴谱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上躯泰,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天谭羔,我揣著相機(jī)與錄音,去河邊找鬼麦向。 笑死瘟裸,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的诵竭。 我是一名探鬼主播话告,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼兼搏,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了沙郭?” 一聲冷哼從身側(cè)響起佛呻,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎病线,沒想到半個(gè)月后件相,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡氧苍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年夜矗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片让虐。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡紊撕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出赡突,到底是詐尸還是另有隱情对扶,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布惭缰,位于F島的核電站浪南,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏漱受。R本人自食惡果不足惜络凿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望昂羡。 院中可真熱鬧絮记,春花似錦、人聲如沸虐先。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蛹批。三九已至撰洗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間腐芍,已是汗流浹背差导。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留甸赃,地道東北人柿汛。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親络断。 傳聞我的和親對(duì)象是個(gè)殘疾皇子裁替,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

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

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