2019-08-06 day-12 總結

文件操作和異常處理

一.文件操作1

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

保存在程序中的數(shù)據是保存在運行內存中的候址,當程序運行結束咙俩,內存會自動釋放型奥,數(shù)據也會消失琐旁。
如果不希望數(shù)據隨著數(shù)據隨著程序的結束而消失误窖,就需要將數(shù)據通過文件存儲到硬盤里叮盘。

程序中經常用來保存數(shù)據的文件有:
數(shù)據庫文件(db, sqlite);json文件;plist文件霹俺;txt文件等
png文件柔吼、jpg文件、gif文件...mp4文件丙唧、mov文件等等

2.文件操作(操作文件中的內容)

1)步驟:打開文件 -> 操作文件內容(讀操作愈魏、寫操作) -> 關閉文件

a.打開文件:
open(file, mode = 'r', encoding=None) ?-? 以指定的方式打開文件,并返回執(zhí)行對象

說明:
file ?-? 字符串;文件在電腦中的地址(文件路徑)
路徑可以寫絕對路徑也可以寫相對路徑
絕對路徑:文件在電腦中的完整路徑(路徑前加r防止\轉義)
相對路徑:./代表當前路徑
../ 代表當前目錄的上層目錄
.../代表當前目錄的上層目錄的上層目錄
注意:當前目錄指的是當前文件所在的目錄

絕對路徑
open(r'D:\Python_1904_Nor\語言基礎\day12-文件操作和異常處理\test.txt')

相對路徑
open('./test.txt')
open('test.txt') ?? # 一個 ./ 可以省略

mode ?-? 字符串想际;文件的打開方式培漏,決定打開文件后能夠對文件做什么以及讀寫的數(shù)據類型。
'r'/'rt'?-? 以只讀的方式打開文件;讀出來的內容是字符串
'rb'/'br' ?-? 以只讀的方式打開文件;讀出來的內容是二進制數(shù)據
'w'/'wt'/'tw' ?-? 以只寫的方式打開文件;將字符串寫入文件;會清空原文件
'wb'/'bw' ?-? 以只寫的方式打開文件;將二進制寫入文件
'a'/'at'/'ta' ?-? 以只寫的方式打開文件;將字符串寫入文件;不會清空原文件,追加
'ab'/'ba' ?-? 以只寫的方式打開文件;將二進制寫入文件;不會清空原文件,追加

encoding?-? 字符串;設置文本文件的編碼方式(只針對文本文件有效)
注意:1.同一個文件胡本,讀和寫的編碼方式必須一樣
2.只針對文本文件的文本操作有效,所有帶'b'的方式都不能設置encoding

打開文件
f = open('test.txt', 'r', encoding='utf-8')

3.讀寫操作

1)讀操作
文件對象.read() - 獲取整個文件的內容,以字符串或者二進制的形式返回
文件對象.readline() - 獲取文本文件中一行的內容牌柄,以字符串或者二進制的形式返回

f = open('test.txt','r',encoding='utf-8')
content = f.read()
print(content)

f.seek(0)  # 移動光標到文件開頭
content = f.readline()
print(content)
f.close()

2)寫操作

f = open('test.txt','w',encoding='utf-8')
f.write('abc')

b.關閉文件
文件對象.close()

二.文件操作2

1.with - open

打開文件,在文件作用域中對文件進行操作侧甫。離開文件作用域文件自動關閉

語法:
with open(file, mode='r', encoding=None) as 文件對象:
文件作用域(操作文件)

with open('./files/test3.txt','r',encoding='utf-8') as f:
    while True:
        line = f.readline()
        if not line:
            break
        print(line)

2.打開不存在的文件

以讀的方式打開不存在的文件:程序會報錯
以寫的方式打開不存在的文件友鼻,不會出現(xiàn)異常傻昙,并且會創(chuàng)建一個空的文件
open('files/test5.txt','wb')

3.二進制文件的讀寫

1)普通文本文件:可以使用帶t或者帶d的讀寫方式去打開
2)二進制數(shù)據文件:視頻文件、音頻文件彩扔、圖片都是二進制文件,這些文件只能用帶b的打開方式去打開

with open('files/TIM.png','rb') as f:
    content = f.read()
    print(content)

with open('files/new_TIM.png','wb') as f:
    f.write(content)

三.文件操作引用

1.怎么做到數(shù)據的持久化

a.將數(shù)據保存到本地文件
b.需要數(shù)據的時候不是直接賦值而是從本地文件中去取值
c.當數(shù)據值發(fā)生改變后僻爽,將最新的數(shù)據更新到文件中

#練習:統(tǒng)計當前程序運行的次數(shù)
with open('files/data.txt','r',encoding='utf-8') as f:
    num = int(f.read())
print('第{}次運行程序'.format(num))
with open('files/data.txt','w',encoding='utf-8') as f:
    f.write(str(num+1))

2.eval的使用
將序列字符串轉換成序列

str1 = '{}'
dict1 = eval(str1)
print(type(dict1))

四.json數(shù)據

import json

json模塊是python內置的模塊虫碉,模塊主要提供和json操作相關的函數(shù)

1.什么是json數(shù)據

json是一種通用的數(shù)據格式;幾乎所有的高級語言都支持將json數(shù)據轉換為當前語言數(shù)據胸梆,也支持將當前語言數(shù)據轉換為json數(shù)據
一般數(shù)據接口提供的數(shù)據都是json格式的數(shù)據

2.json格式

json格式: a. 一個json有且只能有一個數(shù)據
b.這個數(shù)據必須是json支持的數(shù)據類型的數(shù)據

json支持的數(shù)據類型:
數(shù)字類型:包括所有的數(shù)字敦捧,例如:100,12.5,-34碰镜,-2.13兢卵,3e3(支持科學技術法)
字符串:用雙引號引起來的字符集,例如绪颖,"abc","123","abc\n",'\u4e00'(雙引號)
布爾值:只有true和false兩個值(小寫)
數(shù)組:相當于python中的列表秽荤,列表中應該是json支持的數(shù)據類型
字典:相當于pyhton中的字典,key必須是字符串柠横,值可以為任意數(shù),例如{"b":1}
空值:null窃款;相當于python中的None,表示空和沒有

3.將json數(shù)據抓換成python數(shù)據

a.對應關系
json? ? ?? python
數(shù)字類型? ? int/float
字符串 ? ? str,雙引號可能會變成單引號
布爾值 ? ? bool牍氛,true -> True ; false -> False
數(shù)組 ? ? ? ? list
字典 ? ? ? ? dict
空值 ? ? ? ? null -> None

b.轉換方法
json模塊中有一個loads可以將json格式的數(shù)據轉換成python對應的數(shù)據
loads(字符串) - 將json格式的字符串轉換成python數(shù)據
注意:這兒字符串的內容必須是json數(shù)據

4.將python數(shù)據轉換成json

1)轉換關系
python ? ? ? ? json
int/float ? ? ? ? 數(shù)字
str ? ? 字符串晨继,引號都會變成雙引號
bool ? ? 布爾,True -> true ; False -> false
list搬俊、tuple ? ? ? 數(shù)組
dict ? ? ? ? ? 字典
None ? ? ? ? ? null

2)轉換方法
dumps(數(shù)據) ? - ? 將括號中的python數(shù)據轉換成json格式的字符串

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末紊扬,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子唉擂,更是在濱河造成了極大的恐慌餐屎,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件楔敌,死亡現(xiàn)場離奇詭異啤挎,居然都是意外死亡,警方通過查閱死者的電腦和手機卵凑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門庆聘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人勺卢,你說我怎么就攤上這事伙判。” “怎么了黑忱?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵宴抚,是天一觀的道長勒魔。 經常有香客問我,道長菇曲,這世上最難降的妖魔是什么冠绢? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮常潮,結果婚禮上弟胀,老公的妹妹穿的比我還像新娘。我一直安慰自己喊式,他們只是感情好孵户,可當我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著岔留,像睡著了一般夏哭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上献联,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天竖配,我揣著相機與錄音,去河邊找鬼酱固。 笑死械念,一個胖子當著我的面吹牛,可吹牛的內容都是我干的运悲。 我是一名探鬼主播龄减,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼班眯!你這毒婦竟也來了希停?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤署隘,失蹤者是張志新(化名)和其女友劉穎宠能,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體磁餐,經...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡违崇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了诊霹。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片羞延。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖脾还,靈堂內的尸體忽然破棺而出伴箩,到底是詐尸還是另有隱情,我是刑警寧澤鄙漏,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布嗤谚,位于F島的核電站棺蛛,受9級特大地震影響,放射性物質發(fā)生泄漏巩步。R本人自食惡果不足惜旁赊,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望渗钉。 院中可真熱鬧彤恶,春花似錦、人聲如沸鳄橘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瘫怜。三九已至,卻和暖如春本刽,著一層夾襖步出監(jiān)牢的瞬間鲸湃,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工子寓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留暗挑,地道東北人。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓斜友,卻偏偏與公主長得像炸裆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鲜屏,可洞房花燭夜當晚...
    茶點故事閱讀 45,455評論 2 359

推薦閱讀更多精彩內容