2018年6月25日【python學(xué)習(xí)筆記】

一堰乔、文件操作

文件 (保存數(shù)據(jù)--永久的)
文件都有后綴仓犬,不同的后綴表示不同的存儲(chǔ)方式
文本文件(存文字信息)
二進(jìn)制文件:視頻文件、音頻超棺、圖片
可執(zhí)行文件

文本文件向族、二進(jìn)制文件、json文件(重點(diǎn))的操作

1.文件操作(對(duì)文件進(jìn)行讀寫)

步驟(所有的文件操作都滿足這三步):
1.打開文件
2.對(duì)文件進(jìn)行讀/寫操作(讀:獲取文件內(nèi)容; 寫:修改文件內(nèi)容)
3.關(guān)閉文件


python中的文件操作:
1.文本文件:open(文件路徑,打開的模式,encoding(編碼方式))

open函數(shù)有一個(gè)返回值:返回的就是被打開的文件句柄對(duì)象
文件句柄:就是文件的代言人棠绘,對(duì)文件句柄對(duì)象進(jìn)行操作
文件路徑:文件在電腦中對(duì)應(yīng)的地址
1.直接寫全路徑(不推薦使用)
2.一般將文件放到工程中
a.文件和代碼對(duì)應(yīng)的.py文件在同一個(gè)目錄下:路徑直接寫文件名
b.在工程文件夾下件相,但是不直接和代碼文件在一個(gè)目錄里面:./放文件的文件夾名/文件名
打開模式:

  'r'-->讀(以讀的形式打開再扭,只能獲取內(nèi)容,不能修改內(nèi)容)
  'w'-->文本寫(以寫的形式打開夜矗, 只能修改文件泛范,不能獲取文件內(nèi)容)
  'a'-->文本寫
  'br'-->二進(jìn)制讀
  'bw'-->二進(jìn)制寫
  'ba'-->二進(jìn)制寫

2文本文件

a.打開文件
f就是被打開的文件對(duì)應(yīng)的文件句柄
utf-8:一種文本編碼方式,是使用 1-6個(gè)字節(jié)對(duì)Unicode進(jìn)行編碼紊撕;
utf-8就可以編碼所有國家語言對(duì)應(yīng)的字符的文本
gbk:只支持中文文本編碼

f = open('yy_shlie.txt', 'r', encoding='utf-8')

b.讀操作
注意:對(duì)同一文件句柄對(duì)象進(jìn)行操作罢荡,每讀一次內(nèi)容,下次在讀的時(shí)候逛揩,從上次讀的結(jié)束的位置往下讀
read():獲取文件中所有內(nèi)容柠傍,并且返回
文本文件讀取的結(jié)果是字符串

# result = f.read()
# print(result)    # print('hahha')   print('哈哈')

read(n):n-->指定讀取的文本長度(-1:讀取全部內(nèi)容麸俘,n大于長度:讀取所有內(nèi)容)

result = f.read(10)
print(result)    # print('hah

readline():每次讀一行內(nèi)容

result = f.readline()
result = f.readline()
print(result)    # print('哈哈')

f.readlines():將文件中所有的內(nèi)容讀出來辩稽,將每一行的內(nèi)容作為列表的元素返回的

result = f.readlines()
print(result)
練習(xí):1.讀取指定文件的所有內(nèi)容 2.讀取指定文件的所有內(nèi)容(一行一行的讀)
1.result = f.read(-1)
print(result)

2.while True:
    result = f.readline()
    if result == '':
        break
    # if not result:
    #     break
    # if len(result) == 0:
    #     break
    print(result)

二、修改讀取的位置

讀寫文件从媚,每次讀完或者寫完逞泄,下次再讀寫的時(shí)候,是接著上次讀寫的位置往下進(jìn)行讀寫

避免這個(gè)問題的方法:1.重新打開文件拜效,然后再讀喷众;2.設(shè)置讀寫位置
f = open('yy_shlie.txt', 'r', encoding='utf-8')

讀取文件中所有的內(nèi)容,下次在讀就是從文件結(jié)束的位置往后讀

print(f.read())

seek(偏移量):是字節(jié)數(shù)(一個(gè)字母是一個(gè)字節(jié)紧憾,一個(gè)中文漢字是兩個(gè)字節(jié))
設(shè)置讀寫位置為文件的開始:后邊進(jìn)行讀操作的時(shí)候到千,就是從文件開始的位置往后讀
注意:這個(gè) 偏移量一般設(shè)置為0,其他值容易出差錯(cuò)

f.seek(0)
print(f.read())

三赴穗、文本文件的寫操作(修改文件內(nèi)容)

1.打開文件
2.寫操作
3.關(guān)閉

f = open('yy_shlie.txt', 'w', encoding='utf-8')

write(寫的內(nèi)容):文本文件中寫的內(nèi)容時(shí)字符串
注意:'w'-->寫的時(shí)候會(huì)覆蓋原文件的內(nèi)容 'a'-->在原文件的內(nèi)容的后面去追加內(nèi)容

f.write('添加內(nèi)容')

f.seek(0)  # 后面寫的時(shí)候憔四,會(huì)覆蓋前面寫的內(nèi)容的形式去寫
f.writelines(['aaa', 'bbb'])

f.close()

四、文本文件的掌握點(diǎn)

1.文件操作的步驟:

1.打開文件
2.操作
3.關(guān)閉

2.python中打開文件

open()函數(shù):
open(文件路徑, 打開方式, 編碼方式)
文件路徑:絕對(duì)地址般眉、相對(duì)地址
打開方式:
'r'--->讀(默認(rèn))
'w'--->寫(1.覆蓋原文件內(nèi)容)
'a'--->寫(在原文件內(nèi)容后面追加)
文本文件的內(nèi)容了赵,對(duì)應(yīng)的是字符串
讀操作:注意:如果文件的路徑寫錯(cuò)了會(huì)報(bào)錯(cuò):FileNotFoundError
寫操作:注意:'w'、'a'打開文件甸赃,如果這個(gè)文件不存在柿汛,會(huì)創(chuàng)建一個(gè)新的文件

在python中國可以使用以下結(jié)構(gòu)來進(jìn)行文件操作過程:

with open() as 文件變量
---- 在文件打開后關(guān)閉前執(zhí)行的代碼段

with open('yy_shlie.txt', 'r', encoding='utf-8') as f:
    print(f.read())

五、二進(jìn)制文件的操作

二進(jìn)制文件的讀

bytes類:python中的二進(jìn)制數(shù)據(jù)對(duì)應(yīng)的類型是bytes-->data

二進(jìn)制文件的讀'br'

with open('fyh.jpg', 'br') as f:
    data = f.read()
    print(type(data))  # <class 'bytes'>
    print(data)

二進(jìn)制文件的寫'bw'

with open('new.jpg', 'bw') as f:
    f.write(data)  # data需要是bytes類型的數(shù)據(jù)

二進(jìn)制文件的寫'ba'

with open('new1 .jpg', 'ba') as f:
    f.write(data)  # data需要是bytes類型的數(shù)據(jù)

六埠对、json文件的讀寫

json文件:就是后綴是.json的文件络断,用來存儲(chǔ)文本數(shù)據(jù)(以特殊的語法結(jié)構(gòu)來存儲(chǔ)文本信息)

最外層要么是字典結(jié)構(gòu),要么是列表結(jié)構(gòu)
里面的數(shù)據(jù):字符串项玛、數(shù)字貌笨、二進(jìn)制、字典稍计、數(shù)組(列表)

格式:
{}-->字典結(jié)構(gòu)

{
    "name":"aa",
    "age":18,
    "score":[100, 90, 80]
}

[]-->數(shù)組(列表)結(jié)構(gòu)

[
    100,
    "name"
    "person":{"name":"張三"}
]

""-->字符串

"
    name, abc, njxdd, dfsf
"

json文件的讀寫:

python中使用python內(nèi)置模塊json來對(duì)json數(shù)據(jù)進(jìn)行操作
1.讀取json文件中的內(nèi)容:

json.load(f):讀的結(jié)果只有兩種情況躁绸,要么是字典,要么是列表
json.loads(json字符串, 編碼方式)--->將字典字符串轉(zhuǎn)換成字典;將列表字符串轉(zhuǎn)換成列表

import json
result = json.loads('{"name": "hy", "age": 2}', encoding='utf-8')
print(result, type(result))  # {'name': 'hy', 'age': 2} <class 'dict'>

with open('iKang.json', 'r', encoding='utf-8') as f:
    # print(f.read())   這樣拿出來是字符串
    result = json.load(f)
    print(type(result))  # <class 'dict'>  字典
    print(result)

2.json文件的寫操作

json.dump(寫的內(nèi)容, f):寫的內(nèi)容只能是字典或者列表
json.dumps(對(duì)象)--->將字典净刮、列表轉(zhuǎn)換成字符串剥哑,和loads相反

result = json.dumps([1, 2, 3, 4])
print(result, type(result))   # [1, 2, 3, 4] <class 'str'>

with open('myjson.json', 'w', encoding='utf-8') as f:
    dic1 = {'aaa': 100, 'score': 99, 'person': {'name': 'yy', 'age': 23}}  # 字典
    json.dump(dic1, f)

with open('myjson1.json', 'w', encoding='utf-8') as f:
    list1 = [10, 20, 'a', 'abc']  # 列表
    json.dump(list1, f)

with open('myjson2.json', 'w', encoding='utf-8') as f:
    tuple1 = [10, 26, 'a', 'abc', 920, 'fg']  # 元祖
    json.dump(tuple1, f)

七淌哟、學(xué)生信息持久化練習(xí)

寫一個(gè)添加學(xué)生的功能讶凉,將添加的學(xué)生信息持久化
1.添加學(xué)生
2.查看學(xué)生


import json
key_name = 'name'
key_age = 'age'
key_tel = 'tel'
try:
    with open('yy_xsxx.json', 'r', encoding='utf-8') as f:
        all_students = json.load(f)
except:
    all_students = {}
輸入學(xué)生信息
stu_name = input('請(qǐng)輸入學(xué)生姓名:')
stu_age = input('請(qǐng)輸入學(xué)生年齡:')
stu_tel = input('請(qǐng)輸入學(xué)生電話:')
一個(gè)學(xué)生對(duì)應(yīng)一個(gè)字典峻仇,多個(gè)學(xué)生用一個(gè)字典存起來
stu_dict = {
    key_name: stu_name,
    key_age: stu_age,
    key_tel: stu_tel
}
保存學(xué)生信息
all_students[stu_name] = stu_dict
保存到本地
with open('yy_xsxx.json', 'w', encoding='utf-8') as f:
    json.dump(all_students, f)
print(all_students)

八库菲、異常捕獲

在之前的學(xué)習(xí)中献宫,由于各種原因找岖,我們的代碼會(huì)出現(xiàn)各種各樣的錯(cuò)誤姐刁,這些錯(cuò)誤叫異常
如果程序出現(xiàn)異常铃诬,程序會(huì)崩潰蘸际,不能繼續(xù)執(zhí)行座哩。
但是有的時(shí)候出現(xiàn)異常,我們可能希望由自己解決出現(xiàn)異常的問題粮彤,不希望程序崩潰根穷,就可以去捕獲異常

捕獲異常:

格式1:
try:
代碼塊1(需要捕獲異常的代碼塊)
except:
代碼塊2(出現(xiàn)異常后執(zhí)行的)
執(zhí)行過程:先執(zhí)行代碼塊1,如果代碼塊1出現(xiàn)異常导坟,就執(zhí)行代碼塊2屿良;
# 如果代碼塊1不出現(xiàn)異常,就執(zhí)行try結(jié)構(gòu)外的其他結(jié)構(gòu)


import json
try:
    with open('yy_xsxx1.json', 'r', encoding='utf-8') as f:
        all_students = json.load(f)
except:
    print('出現(xiàn)異常')

格式2:

try:
    代碼塊1
except 錯(cuò)誤類型列表:
    代碼塊2
#出現(xiàn)指定錯(cuò)誤類型的異常惫周,才會(huì)捕獲

try:
    with open('yy_xsxx2.json', 'r', encoding='utf-8') as f:
        all_students = json.load(f)
except FileNotFoundError:
    print('出現(xiàn)異常')
except ValueError:
    print('值出現(xiàn)異常')
finally:
    print('不管有沒有異常都要執(zhí)行')
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末尘惧,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子递递,更是在濱河造成了極大的恐慌喷橙,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件漾狼,死亡現(xiàn)場(chǎng)離奇詭異重慢,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)逊躁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門似踱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人稽煤,你說我怎么就攤上這事核芽。” “怎么了酵熙?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵轧简,是天一觀的道長。 經(jīng)常有香客問我匾二,道長哮独,這世上最難降的妖魔是什么拳芙? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮皮璧,結(jié)果婚禮上舟扎,老公的妹妹穿的比我還像新娘。我一直安慰自己悴务,他們只是感情好睹限,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著讯檐,像睡著了一般羡疗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上别洪,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天叨恨,我揣著相機(jī)與錄音,去河邊找鬼蕉拢。 笑死特碳,一個(gè)胖子當(dāng)著我的面吹牛诚亚,可吹牛的內(nèi)容都是我干的晕换。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼站宗,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼闸准!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起梢灭,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤夷家,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后敏释,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體库快,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年钥顽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了义屏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蜂大,死狀恐怖闽铐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情奶浦,我是刑警寧澤兄墅,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站澳叉,受9級(jí)特大地震影響隙咸,放射性物質(zhì)發(fā)生泄漏沐悦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一五督、第九天 我趴在偏房一處隱蔽的房頂上張望所踊。 院中可真熱鬧,春花似錦概荷、人聲如沸秕岛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽继薛。三九已至,卻和暖如春愈捅,著一層夾襖步出監(jiān)牢的瞬間遏考,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國打工蓝谨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留灌具,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓譬巫,卻偏偏與公主長得像咖楣,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子芦昔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

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

  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 31,898評(píng)論 2 89
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理诱贿,服務(wù)發(fā)現(xiàn),斷路器咕缎,智...
    卡卡羅2017閱讀 134,600評(píng)論 18 139
  • 開場(chǎng)白 由于被拉進(jìn)了一個(gè)以做硬科幻電影為目標(biāo)的群珠十,所以今天就在睡覺前寫一篇相關(guān)的文章,來談一下對(duì)于科幻中的科的作用...
    LostAbaddon閱讀 23,721評(píng)論 10 17
  • chrome插件的開發(fā)其實(shí)并不難凭豪,看著官方文檔來開發(fā)一般都不會(huì)有太大的問題;這里我主要整理下插件中多個(gè)頁面之間通信...
    Addy_Zhou閱讀 3,626評(píng)論 0 1
  • 心懷夢(mèng)想的人永不衰老焙蹭, 縱然斗換星移,歲月變遷嫂伞, 即便那身軀孔厉,隨著落葉一道, 腐朽末早,又化作春泥烟馅。 他的靈魂,依舊在...
    冰海寒星閱讀 221評(píng)論 0 1