day12-文件操作

文件操作

1.數(shù)據(jù)持久化(數(shù)據(jù)本地化)

計(jì)算機(jī)內(nèi)存分為硬盤和運(yùn)行內(nèi)存友鼻。當(dāng)運(yùn)行程序的時(shí)候系統(tǒng)會(huì)自動(dòng)在裕興內(nèi)存中開辟空間保存程序隱形過程中
產(chǎn)生的數(shù)據(jù)酗昼;但是當(dāng)程序運(yùn)行的結(jié)束的時(shí)候廊谓,這個(gè)內(nèi)存空間會(huì)自動(dòng)銷毀,所以數(shù)據(jù)也會(huì)銷毀麻削。
如果希望數(shù)據(jù)一直存在蒸痹,需要將數(shù)據(jù)儲(chǔ)存在硬盤中舔示。

存儲(chǔ)到本地文件的數(shù)據(jù),就是存儲(chǔ)在硬盤中的數(shù)據(jù)电抚,就能持久化
txt文件、二進(jìn)制文件(圖片竖共、視頻蝙叛、音頻、壓縮文件)公给、json文件借帘、plist文件、數(shù)據(jù)庫文件(.db,.sql

2.文件操作 - 文件內(nèi)容的操作

基本步驟:打開文件 - 讀/寫 - 關(guān)閉
1)打開文件
open(file,model = 'r', encoding = None) - 打開指定文件淌铐,返回文件對(duì)

file - 字符串肺然,需要打開的文件的路徑,可以是絕對(duì)路徑腿准,也可以是相對(duì)路徑
絕對(duì)路徑:文件在電腦中的全路徑(一般很少使用)
相對(duì)路徑:./斜桿(當(dāng)前目錄-當(dāng)前py文件所在的目錄)际起,可以省略
../(當(dāng)前目錄的上層目錄)
.../(當(dāng)前目錄的上層目錄的上層目錄)

model - 字符串,文件打開方式吐葱;打開方式?jīng)Q定了打開文件后支持的操作和操作的數(shù)據(jù)類型
'r':默認(rèn)值街望,只讀;讀出來的數(shù)據(jù)是字符串類型
'w':只寫弟跑;只能將字符串寫入文件灾前;(先刪除原文件的內(nèi)容再寫)
'rb'/'br':只讀;讀出來的數(shù)據(jù)是二進(jìn)制數(shù)據(jù)(bytes)
'wb'/'bw': 只寫孟辑;只能將二進(jìn)制數(shù)據(jù)寫入文件(先刪除原文件的內(nèi)容再寫)
'a':只寫哎甲;只能將字符串寫入文件;(保留原文件內(nèi)容追加)
'ab'/'ba':只寫饲嗽,將二進(jìn)制寫入文件(保留原文件寫入)

encoding - 設(shè)置文件內(nèi)容的編碼方式炭玫。固定寫:'utf-8';只針對(duì)文本文件有效
注意:只有文本操作才能設(shè)置編碼方式
文本文件在讀和寫的時(shí)候的編碼和解碼的方式必須一致
2)操作文件
a.讀操作 - 獲取文件中的內(nèi)容貌虾,
文件對(duì)象.read() - 會(huì)返回文件中的內(nèi)容
文件對(duì)象.readline() - 讀一行內(nèi)容(從讀寫位置讀到一行結(jié)尾)

3)關(guān)閉文件
文件對(duì)象.close()

f = open('./file/text.txt', 'r', encoding='utf-8')

content = f.read()
print(type(content))
print(content)

f.seek(0)

print(f.readline())


while True:
    content = f.readline()
    if not content:
        break
    print(content)

移動(dòng)讀寫位置(移動(dòng)光標(biāo))
文件對(duì)象.seek(0) - 將讀寫位置移到文件開頭

f.seek(0)

f.close()

寫操作:文件對(duì)象.write(寫的內(nèi)容) - 將指定的內(nèi)容寫入文件中

f = open('file/text.txt', 'w', encoding='utf-8')
f.write('abc')
f.close()

練習(xí)

數(shù)據(jù)持久化:a.需要數(shù)據(jù)的時(shí)候去文件讀數(shù)據(jù) b.數(shù)據(jù)發(fā)生改變后將最新的數(shù)據(jù)寫入文件中
統(tǒng)計(jì)當(dāng)前程序運(yùn)行的次數(shù)

f = open('file/count.txt', 'r', encoding='utf-8')
num = int(f.read())
f.close
num += 1
print(num)

# 每次寫入清空文件中的內(nèi)容
f = open('file/count.txt', 'w', encoding='utf-8')
f.write(str(num))
f.close()

 練習(xí):寫一

個(gè)程序打印賬號(hào)和余額
存錢和取錢

value = int(input('1.存錢  2.取錢:'))

if value == 1:
    in_money = int(input('金額:'))
    f = open('file/count1.txt', 'r', encoding='utf-8')
    num = int(f.read())
    f.close
    in_money += num
    print(in_money)
    f = open('file/count1.txt', 'w', encoding='utf-8')
    f.write(str(in_money))
    f.close()

二進(jìn)制文件

1.常見的二進(jìn)制文件:圖片文件础嫡、視頻文件、音頻文件酝惧、壓縮文件等

不是只有二進(jìn)制文件才支持'b'操作(rb,wb,ab)榴鼎,但是二進(jìn)制文件只能采用'b‘操作

注意:所有帶'b'的操作不能設(shè)置encoding

f = open('file/text.txt', 'rb')
content = f.read()
print(type(content))
f.close()

f = open('file/字符串.png', 'rb')
content = f.read()
print(content)
f.close()

f = open('file/new.jpg', 'wb')
f.write(content)
f.close()

下載圖片實(shí)例

import requests
response = requests.get('https://www.baidu.com/img/bd_logo1.png?where=super')
f = open('file/baidu.png', 'wb')
f.write(response.content)
f.close()

2.文件不存在

如果以讀的方式打開一個(gè)不存在的文件,程序會(huì)報(bào)錯(cuò)
如果以寫的方式打開一個(gè)不存在的文件晚唇,不會(huì)報(bào)錯(cuò)巫财,并且會(huì)自動(dòng)創(chuàng)建這個(gè)文件

3.打開文件的簡(jiǎn)寫

1)語法:
with open(文件路徑,讀寫方法哩陕, encoding=b編碼方式) as 文件對(duì)象:
文件域(操作文件)

2)說明:
以這種方式打開文件平项,在文件域結(jié)束后赫舒,文件會(huì)自動(dòng)關(guān)閉

json數(shù)據(jù)

1.什么是json數(shù)據(jù) - 滿足json格式的數(shù)據(jù)

json格式:a.一個(gè)json有且只能有一個(gè)數(shù)據(jù) b.這個(gè)數(shù)據(jù)必須是json支持的數(shù)據(jù)類型對(duì)應(yīng)的數(shù)據(jù)
2)json支持的數(shù)據(jù)類型
a.數(shù)字類型 - 所有的數(shù)字,100闽瓢, 0.23
b.字符串 - 使用雙引號(hào)引起來的字符集接癌,支持轉(zhuǎn)義字符和編碼字符例如:"\u4e00qaz", "123"
c.布爾 - 只有true 和false
d.數(shù)組 - 相當(dāng)于python中的列表,例如:["abc", 100, true, [12,45]]
e.字典 - 相當(dāng)于python中的字典扣讼,key只能是字符串缺猛,例如{"q": 100, "c": [12, 34}}
f. null - 相當(dāng)于python中的None,表示空

2.將json轉(zhuǎn)python

json python
數(shù)字類型 int or float
字符串 字符串,雙引號(hào)可能會(huì)變單引號(hào)
布爾 bool,true -> True, false -> False
數(shù)組 list,["abc", true] -> ['abc', True]
null None

2)方法
loads(字符串) - 將json格式的字符串轉(zhuǎn)換成對(duì)應(yīng)的python數(shù)據(jù)
注意:字符串的內(nèi)容必須是json格式的數(shù)據(jù)

result = json.loads('123')
print(result)
result = json.loads('"abc"')
print(result)
result = json.loads('[123, "abc", false, null]')
print(result)

3.將python轉(zhuǎn)json

1)轉(zhuǎn)換關(guān)系
python json
int/float 數(shù)字
str 字符串椭符,單引號(hào)會(huì)變雙引號(hào)
bool 布爾荔燎,True ->true,False -> false
list/tuple 數(shù)組
dict 字典
None null

2)方法

dumps(數(shù)據(jù))   -   將數(shù)據(jù)格式轉(zhuǎn)換成json格式的字符串

result = json.dumps('abc')
print(type(result), result)

result = json.dumps([10, True, 'abc', [None, 100]])
print(type(result), result)

students = {'name': 'xianmong', 'age': 17}
result = json.dumps(students)
print(type(result),result)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市销钝,隨后出現(xiàn)的幾起案子有咨,更是在濱河造成了極大的恐慌,老刑警劉巖蒸健,帶你破解...
    沈念sama閱讀 222,464評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件座享,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡似忧,警方通過查閱死者的電腦和手機(jī)征讲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來橡娄,“玉大人诗箍,你說我怎么就攤上這事⊥彀Γ” “怎么了滤祖?”我有些...
    開封第一講書人閱讀 169,078評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)瓶籽。 經(jīng)常有香客問我匠童,道長(zhǎng),這世上最難降的妖魔是什么塑顺? 我笑而不...
    開封第一講書人閱讀 59,979評(píng)論 1 299
  • 正文 為了忘掉前任汤求,我火速辦了婚禮,結(jié)果婚禮上严拒,老公的妹妹穿的比我還像新娘扬绪。我一直安慰自己,他們只是感情好裤唠,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評(píng)論 6 398
  • 文/花漫 我一把揭開白布挤牛。 她就那樣靜靜地躺著,像睡著了一般种蘸。 火紅的嫁衣襯著肌膚如雪墓赴。 梳的紋絲不亂的頭發(fā)上竞膳,一...
    開封第一講書人閱讀 52,584評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音诫硕,去河邊找鬼坦辟。 笑死,一個(gè)胖子當(dāng)著我的面吹牛章办,可吹牛的內(nèi)容都是我干的锉走。 我是一名探鬼主播,決...
    沈念sama閱讀 41,085評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼纲菌,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了疮绷?” 一聲冷哼從身側(cè)響起翰舌,我...
    開封第一講書人閱讀 40,023評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎冬骚,沒想到半個(gè)月后椅贱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,555評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡只冻,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評(píng)論 3 342
  • 正文 我和宋清朗相戀三年庇麦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片喜德。...
    茶點(diǎn)故事閱讀 40,769評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡山橄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出舍悯,到底是詐尸還是另有隱情航棱,我是刑警寧澤,帶...
    沈念sama閱讀 36,439評(píng)論 5 351
  • 正文 年R本政府宣布萌衬,位于F島的核電站饮醇,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏秕豫。R本人自食惡果不足惜朴艰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望混移。 院中可真熱鬧祠墅,春花似錦、人聲如沸歌径。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沮脖。三九已至金矛,卻和暖如春芯急,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背驶俊。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工娶耍, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人饼酿。 一個(gè)月前我還...
    沈念sama閱讀 49,191評(píng)論 3 378
  • 正文 我出身青樓榕酒,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親故俐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子想鹰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評(píng)論 2 361

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

  • 1. 生成式 生成式本質(zhì)還是生成器,只是寫法更簡(jiǎn)潔 (1) 生成式的寫法1a. 語法一:(表達(dá)式 for 變量 i...
    火星人_ef5b閱讀 257評(píng)論 0 0
  • 前言回顧 1.函數(shù)作為變量 實(shí)參高階函數(shù)药版、返回值高階函數(shù)列表.sort(),sorted(),max(),min(...
    不語sun閱讀 234評(píng)論 0 0
  • day12-文件操作和json數(shù)據(jù) 一辑舷、文件操作 1. 數(shù)據(jù)持久化 計(jì)算機(jī)內(nèi)存分為硬盤和運(yùn)行內(nèi)存 存儲(chǔ)到本地文件中...
    Octane閱讀 296評(píng)論 0 1
  • 1.數(shù)據(jù)持久化 程序中默認(rèn)產(chǎn)生的數(shù)據(jù)是保存在內(nèi)存中的,程序結(jié)束數(shù)據(jù)會(huì)自動(dòng)銷毀槽片。如果希望程序結(jié)束后數(shù)據(jù)不消失何缓,那么需...
    筱哥家的小跟班閱讀 243評(píng)論 0 0
  • day12-文件操作 一、文件操作 1.數(shù)據(jù)持久化(數(shù)據(jù)本地化) 計(jì)算機(jī)內(nèi)存分為硬盤和運(yùn)行內(nèi)存还栓。當(dāng)運(yùn)行程序的時(shí)候系...
    毋望閱讀 57評(píng)論 0 0