python_筆記_day17_文件操作_ json

一.文件操作

  • 備注: os庫(kù)提供了很多文件管理和操作

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

  • 通過(guò)文件將數(shù)據(jù)存到硬盤中
  • 數(shù)據(jù)庫(kù)文件库正,txt、json幢痘、plist、xml家破、png颜说、mp4

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

  • 基本步驟: 打開文件 -- 操作文件(讀/寫) -- 關(guān)閉文件
open(file, mode ,encoding=None) 购岗,以指定方式打開指定文件,并且返回被打開的文件對(duì)象
file -- 字符串 需要打開的文件的路徑
        ./  -- 當(dāng)前文件所在目錄(./ 可以省略)
        ../ -- 當(dāng)前文件所在目錄的上層目錄
mode -- 字符串 打開方式
        r -- 默認(rèn)值门粪,以讀的方式打開文件(只能進(jìn)行讀操作)
        w -- 以寫的方式打開文件(只能進(jìn)行寫的操作)喊积,覆蓋
        a -- 以寫的方式打開文件(只能進(jìn)行寫的操作),追加
        rb/br -- 以讀的方式打開文件玄妈,讀出來(lái)的內(nèi)容是二進(jìn)制數(shù)據(jù)
        wb/bw -- 以寫的方式打開文件(只能進(jìn)行寫操作)乾吻,將2進(jìn)制數(shù)據(jù)寫入文件
        + -- 以讀寫的方式打開(了解)

encoding -- 文本編碼方式
        utf-8
        注意:文本編碼只針對(duì)文件,二進(jìn)制文件不能設(shè)置編碼方式

2.1 文件讀操作

···
文件對(duì)象.read() -- 從讀寫位置開始拟蜻,讀到文件結(jié)尾绎签,并返回
(讀寫位置默認(rèn)在文件開通)
文件對(duì)象.seek(字節(jié)數(shù)) -- 將讀寫位置移動(dòng)到指定的地方

···

  • 注意:打開文件的時(shí)候,如果以讀的方式打開一個(gè)不存在的文件酝锅,會(huì)出現(xiàn)異常诡必,會(huì)出現(xiàn)異常,報(bào)錯(cuò)
  • 如果以寫的方式打開一個(gè)不存在的文件搔扁,不會(huì)出現(xiàn)異常爸舒,并且會(huì)自動(dòng)創(chuàng)建對(duì)應(yīng)的文件再打開
def test_r():
    file = open('test.txt','r',encoding='utf-8')
    str1 = 'start'
    print(file.readlines())
    # while str1:
    #     str1 =file.readline()
    #     print(str1,end = '')

2.2 文件寫操作

文件對(duì)象.write(寫的內(nèi)容)  - 將指定內(nèi)容寫入到指定文件中,返回被寫入的內(nèi)容的長(zhǎng)度
def test_w():
    file = open('test.txt','w+',encoding='utf-8')
    file.write('柯基二哈稿蹲,嗷嗷哦啊哦嗷嗷')
    file.seek(0)
    print(file.read())
    file.close() #關(guān)閉文件

3 二進(jìn)制文件操作

  • rb -- 讀的時(shí)候獲取到的是二進(jìn)制數(shù)據(jù)(bytes)
  • wb -- 寫的時(shí)候希爾的內(nèi)容要求類型是二進(jìn)制
  • 普通的文本文件可以通過(guò)二進(jìn)制的形式打開扭勉,影響只是獲取到的內(nèi)容,和寫進(jìn)去的內(nèi)容的數(shù)據(jù)類型
  • 二進(jìn)制文件只能以二進(jìn)制的形式打開

3.1二進(jìn)制數(shù)據(jù)

  • 一般二進(jìn)制數(shù)據(jù)都是通過(guò)網(wǎng)絡(luò)請(qǐng)求獲取道场绿,或者通過(guò)讀取本地的二進(jìn)制文件來(lái)獲取
  • 1)將字符串轉(zhuǎn)換二進(jìn)制
bytes(str,encoding="utf-8")
str.encode(編碼方式)
f1= open('test1.txt','wb+')
f1.write(bytes('阿米托福',encoding='utf-8'))
    1. 將二進(jìn)制轉(zhuǎn)換成字符串
str(二進(jìn)制數(shù)據(jù)剖效,編碼方式)
二進(jìn)制.decode('編碼方式’)

4. 文件上下文

with open(文件路徑,打開方式焰盗,編碼方式) as 文件對(duì)象
    操作文件
文件操作完成后璧尸,會(huì)自動(dòng)關(guān)閉   
with open('test1.txt','rb+') as f:
    print(f.read())

二. json

1. json數(shù)據(jù)

1.1 滿足json格式的數(shù)據(jù)叫json數(shù)據(jù)

1.2 json格式:

一個(gè)json有且只有一個(gè)數(shù)據(jù),這個(gè)數(shù)據(jù)必須是滿足是json支持的數(shù)據(jù)類型

1.3 json 支持的數(shù)據(jù)類型:

  • 數(shù)子(number) - 包含所有的數(shù)字(整數(shù)和小數(shù)),支持科學(xué)計(jì)數(shù)法熬拒,例如:100爷光,3.12
  • 字符串(string)-用雙引號(hào)括起來(lái)的字符串,字符也可以是轉(zhuǎn)義字符和
    編碼字符例如:"abc"澎粟,"\n", "\u4e01"
  • 布爾(bool) true/false
  • 數(shù)組(array) - 相當(dāng)于Python中的列表蛀序,[100,200,"abx" ,[1,2,3]]
  • 字典(dictionary) - 相當(dāng)于Python中的字典
  • 空值 - null , 相當(dāng)于None

2 使用json

    1. 解析json數(shù)據(jù)(獲取到j(luò)son數(shù)據(jù)后將json中想要的數(shù)據(jù)解析出來(lái)) -- 做前端開發(fā)人員的工作
  • 在Python中有一個(gè)內(nèi)置庫(kù)活烙,專門負(fù)責(zé)json數(shù)據(jù)處理徐裸,json庫(kù)

2.1.將json數(shù)據(jù)轉(zhuǎn)換為Python數(shù)據(jù)

json數(shù)據(jù)          Python數(shù)據(jù)
數(shù)字number        int/float
string            str,可能會(huì)出現(xiàn)將”變成'
bool              bool true->True false ->False  
array             liset
dictionary        dict
null              None
import json

# ===================1.json轉(zhuǎn)Python(json數(shù)據(jù)解析)
# json.loads(str,encoding='utf-8')  -- 解析json數(shù)據(jù)啸盏,返回json對(duì)應(yīng)的Python數(shù)據(jù)
#  --字符串中的內(nèi)容本身就是一個(gè)json數(shù)據(jù)(去掉引號(hào)后重贺,本身就是就是一個(gè)接送數(shù)據(jù))

# result = json.loads('"abc"',encoding='utf-8')
# print(result,type(result))
# result = json.loads('100.12',encoding='utf-8')
# print(result,type(result))
# result = json.loads('true',encoding='utf-8')
# print(result,type(result))
# result = json.loads('[10,23,"yuting",true]',encoding='utf-8')
# print(result,type(result))
# result = json.loads('{"a":100,"b":flase}',encoding='utf-8')
# print(result,type(result))

with open('33.json','r',encoding='utf-8') as f:
    test = json.loads(f.read(),encoding='utf-8')
# print(type(test))

2.2 python轉(zhuǎn)json

Python數(shù)據(jù)        json數(shù)據(jù)
int/float          number 
bool            True - true.False->false
str             string,將單引號(hào)變成雙引號(hào)
list、tuple      array
dict            dictionary
空值             None ->null
  • json.dumps(python數(shù)據(jù)) --》將Python數(shù)據(jù)轉(zhuǎn)換成內(nèi)容是對(duì)應(yīng)的json數(shù)據(jù)的字符串
result = json.dumps([12,'abc',[1,2],True,('a',12,4)])
print(type(result),result)

3.json文件操作

json.load(文件對(duì)象) - 將文件對(duì)象中的文件的內(nèi)容轉(zhuǎn)換成Python數(shù)據(jù)
                    文件的內(nèi)容只是json數(shù)據(jù)
with open('33.json','r',encoding='utf-8') as f:
    result = json.load(f)

json.dump(python數(shù)據(jù),文件對(duì)象) - 將文件對(duì)象中的文件的內(nèi)容轉(zhuǎn)換成json數(shù)據(jù)
                    
with open('44.json','r',encoding='utf-8') as f:
    json.dump('abcd',f)
  • 練習(xí):找json文件中favourite最高的條目
with open('33.json','r',encoding='utf-8') as f:
    test = json.loads(f.read(),encoding='utf-8')
dict1 = test["data"]
dict2 = max(dict1,key= lambda x: int(x['favourite']))
print(dict2['name'], dict2['favourite'])
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末气笙,一起剝皮案震驚了整個(gè)濱河市次企,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌潜圃,老刑警劉巖缸棵,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異谭期,居然都是意外死亡堵第,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門崇堵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)型诚,“玉大人,你說(shuō)我怎么就攤上這事鸳劳≌幔” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵赏廓,是天一觀的道長(zhǎng)涵紊。 經(jīng)常有香客問(wèn)我,道長(zhǎng)幔摸,這世上最難降的妖魔是什么摸柄? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮既忆,結(jié)果婚禮上驱负,老公的妹妹穿的比我還像新娘。我一直安慰自己患雇,他們只是感情好跃脊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著苛吱,像睡著了一般酪术。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上翠储,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天绘雁,我揣著相機(jī)與錄音,去河邊找鬼援所。 笑死庐舟,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的住拭。 我是一名探鬼主播继阻,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼耻涛,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼废酷!你這毒婦竟也來(lái)了瘟檩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤澈蟆,失蹤者是張志新(化名)和其女友劉穎墨辛,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體趴俘,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡睹簇,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了寥闪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片太惠。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖疲憋,靈堂內(nèi)的尸體忽然破棺而出凿渊,到底是詐尸還是另有隱情,我是刑警寧澤缚柳,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布埃脏,位于F島的核電站,受9級(jí)特大地震影響秋忙,放射性物質(zhì)發(fā)生泄漏彩掐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一灰追、第九天 我趴在偏房一處隱蔽的房頂上張望堵幽。 院中可真熱鬧,春花似錦弹澎、人聲如沸朴下。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)桐猬。三九已至,卻和暖如春刽肠,著一層夾襖步出監(jiān)牢的瞬間溃肪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工音五, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留惫撰,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓躺涝,卻偏偏與公主長(zhǎng)得像厨钻,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

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