day_09 模塊管理触趴、文件操作氮发、json文件、異常捕獲

1.模塊管理

1.什么是模塊
一個(gè).py文件就是一個(gè)模塊
2.import
可以通過(guò)import關(guān)鍵字導(dǎo)入其它的模塊

import 模塊名(.py文件名)
直接導(dǎo)入模塊的時(shí)候冗懦,相當(dāng)于把被導(dǎo)入模塊里的內(nèi)容粘貼到import的位置
3.怎么使用模塊中的內(nèi)容爽冕?什么內(nèi)容是可以使用的?
import 模塊名 --->導(dǎo)入模塊中的所有內(nèi)容
模塊名.變量名(函數(shù)名披蕉、類):的方法去使用模塊中的內(nèi)容

在模塊中聲明全局變量都可以使用(普通變量颈畸、函數(shù)、類)

other.py

name = 10
print(name)

def func_other():
    global abc
    abc = 100
    print('====')

# 打印當(dāng)前模塊的名字
print(__name__)

管理模塊.py

import other

# 在模塊中聲明全局變量都可以使用
print(other.func_other(), other.name, other.abc)

>>>
10
other
====
None 10 100
  1. from 模塊 import 內(nèi)容列表1嚣艇,內(nèi)容2... --->導(dǎo)入模塊中的指定內(nèi)容
    使用內(nèi)容的時(shí)候承冰,不用在被導(dǎo)入的變量或函數(shù)或類前面加模塊名

other2.py

def func_other2():
    print('~~~~')
    return 100

# 在這寫(xiě)當(dāng)前模塊中寫(xiě)不需要被其它模塊導(dǎo)入和粘貼的代碼
if __name__=='__main__':
    name = 1010
    print(name)

管理模塊.py

from other2 import func_other2
print(func_other2())

import other2

>>>
~~~~
100

5.阻止被導(dǎo)入的模塊中的不必要的代碼被粘貼到當(dāng)前模塊
一般情況下华弓,除了函數(shù)的聲明和類的聲明以外食零,其它的代碼都放在if里面

name:是每個(gè)模塊自帶的一個(gè)屬性,是用來(lái)保存當(dāng)前這個(gè)模塊的名字的寂屏。
但是當(dāng)正在執(zhí)行當(dāng)前模塊的時(shí)候贰谣,這個(gè)模塊是固定的'main'

print('==:', other.__name__)
print(__name__)

if __name__=='__main__':
    pass  # 這個(gè)里面的代碼不會(huì)被其它模塊使用

>>>
==: other
__main__

6.使用as重命名
import 模塊名 as 新的名字
from 模塊名 import 函數(shù)名 as 新的函數(shù)名

import math as my_math
print(my_math.pi)

from random import randint as my_randint
print(my_randint(1, 10))

>>>
3.141592653589793
8

2.基本文件操作

(所有)文件操作流程:打開(kāi)文件 -> 操作文件(讀/寫(xiě)) -> 關(guān)閉文件

2.1.打開(kāi)文件:open(文件路徑, 打開(kāi)的方式, 編碼方式)

文件路徑(必填) --> 決定打開(kāi)那個(gè)文件

打開(kāi)方式(默認(rèn)值是'r') --> 決定打開(kāi)文件后是進(jìn)行什么操作
??''r' - 讀操作(讀出來(lái)是字符串)
?? 'rb'/'br' - 讀操作(讀出來(lái)的數(shù)據(jù)是二進(jìn)制)
?? 'w' - 寫(xiě)操作(可以將文本數(shù)據(jù)寫(xiě)入文件中)
?? 'wb'/'bw' - 寫(xiě)操作(可以將二進(jìn)制數(shù)據(jù)寫(xiě)入文件中)
?? 'a' - 寫(xiě)操作(追加)

編碼方式 --> 主要針對(duì)文本文件的讀寫(xiě)(不同的操作系統(tǒng)默認(rèn)的文本編碼方式不同,
Windows -> gbk, mac -> utf_8)

2.2.文本文件讀

a.放在工程外面的文件:寫(xiě)絕對(duì)路徑:D:/course/test.txt

open('D:/course/test.txt')

b.將文件放到工程目錄下的某個(gè)位置迁霎,寫(xiě)相對(duì)路徑(相對(duì)于工程目錄):./相對(duì)路徑 或者 ../相對(duì)路徑
當(dāng)py文件直接放在工程目錄下吱抚,想要使用open打開(kāi)工程中的其他文件使用'./'
當(dāng)py文件在工程目錄的子目錄下面,想要使用open打開(kāi)工程中的其他文件使用'../'

open('./test2.txt')
open('./files/test3.txt')

文件操作流程

1.打開(kāi)文件

 # 打開(kāi)文件考廉,返回文件句柄(文件)
    f = open('./test2.txt', 'r', encoding='utf-8')

2.讀文件(獲取文件的文件內(nèi)容)

    """
    文件.read(): 獲取文件內(nèi)容秘豹,并且返回
    read(n) --> 設(shè)置讀的長(zhǎng)度
    """
    content = f.read()
    print(content)

3.關(guān)閉文件

f.close()

2.3.文本文件的寫(xiě)操作

# 1.打開(kāi)文件
    """
    注意:以讀的方式打開(kāi)文件,如果這個(gè)文件不存在昌粤,回報(bào)錯(cuò)fileNotFindError:
          以寫(xiě)的方式打開(kāi)文件既绕,如果這個(gè)文件不存在,就好創(chuàng)建這個(gè)文件
    """
    f = open('./test2.txt', 'w', encoding='utf-8')
    """
    'w':在寫(xiě)的時(shí)候回清空文件中原路的內(nèi)容涮坐,然后再往里面寫(xiě)數(shù)據(jù)
    'a':在源文件內(nèi)容的最后添加新的數(shù)據(jù)
    """
    # 2.寫(xiě)操作
    f.write('束帶結(jié)發(fā)')
    # 3.關(guān)閉文件
    f.close()

2.4.二進(jìn)制文件的讀寫(xiě)操作

音頻凄贩、視頻、圖片文件袱讹,都是二進(jìn)制文件

讀文件

f = open('./files/lufei.jpg', 'rb')
    # 讀文件
    image_data = f.read()
    # bytes:python中二進(jìn)制數(shù)據(jù)對(duì)應(yīng)的數(shù)據(jù)類型
    print(type(image_data), image_data)
    # 關(guān)閉文件
    f.close()

寫(xiě)文件

f = open('./files/new.jpg', 'wb')
    f.write(image_data)
    f.close()

2.5.通過(guò)with關(guān)鍵字取打開(kāi)文件

with open() as 文件變量名:
??? ? 文件操作
在文件操作結(jié)束后會(huì)自動(dòng)去關(guān)閉文件

# 讀
    with open('./files/new.jpg', 'rb') as f:
        jpg_data = f.read()

    #寫(xiě)
    with open('./files/new.jpg', 'wb') as f:
        f.write(jpg_data)

3.json文件

json文件(文本)疲扎,就是文件后綴是.json的文件。內(nèi)容必須是json格式的內(nèi)容
json格式:
1.內(nèi)容是字符串
2.最外層是字典,字典里面就必須是鍵值對(duì)
3.最外層是數(shù)組(列表)椒丧,數(shù)組里面的內(nèi)容必須是數(shù)組數(shù)組

3.1.json文件的讀操作

    with open('./files/test.json', 'r', encoding='utf-8') as f:
        # 直接使用read()去讀壹甥,獲取到的是字符串?dāng)?shù)據(jù),包含了json文件中的所有內(nèi)容(包括注釋部分)
        # content = f.read()
        # print(content, type(content))

        """
        load(文件對(duì)象):獲取指定json文件中的內(nèi)容,返回值的類型是json文件最外層的對(duì)應(yīng)的數(shù)據(jù)類型
        dict --> dict
        array --> list
        string --> str
        number --> int/float
        true/flase --> True/Flase
        null --> None
        """
        # json
        # // 最外層只能是一個(gè)字典瓜挽,一個(gè)數(shù)組盹廷,一個(gè)字符串
        # // 支持的數(shù)據(jù)類型:字符串("abc"), 數(shù)字(1, 2.222, ), 布爾值(true / false), 數(shù)組([1, 23, "ads"]), 字典({key: value})
        # // null(None)空

        content = json.load(f)
        print(content, type(content))

3.2json文件的寫(xiě)操作

    with open('./files/new.json', 'w', encoding='utf-8') as f:
        # 寫(xiě)數(shù)據(jù)
        """
        dump(寫(xiě)的內(nèi)容,文件對(duì)象)
        """
        w_content = [
            {'name': 'a1', 'age': 18},
            {'name': 'a2', 'age': 20}
        ]
        json.dump(w_content, f)

練習(xí):輸入學(xué)生的姓名和電話久橙,保存到本地(要求下次啟動(dòng)程序俄占,添加學(xué)生時(shí),之前添加的學(xué)生信息還在)

name = input('名字:')
    tel = input('電話:')
    student = {'name': name, 'tel':tel}

    try:
        with open('./files/students.json', 'r', encoding='utf-8') as f:
            all_students = json.load(f)

    except FileNotFoundError:
        all_students = []

    all_students.append(student)
    with open('./files/students.json', 'w', encoding='utf-8') as f:
        json.dump(all_students, f)

3.3.json模塊的其他操作

loads(字符串淆衷, 編碼方式) --> 將指定的字符串(json字符串)缸榄,轉(zhuǎn)化成json數(shù)據(jù)
將字符串轉(zhuǎn)換成字符串\將字符串轉(zhuǎn)換成列表

 content = json.loads('{"a":true, "b":2}', encoding='utf-8')
 print(content, type(content))


>>>
{'a': True, 'b': 2} <class 'dict'>

dumps(對(duì)象)
將對(duì)象轉(zhuǎn)換成json字符串
字典\列表轉(zhuǎn)換成json字符串

content = json.dumps(['aaa', 1, True])
# content = '["aaa", 1, true]'
content2 = str(['aaa', 1, True])
# content2 = '['aaa', 1, True]'
print(content, type(content))


>>>
["aaa", 1, true] ['aaa', 1, True] <class 'str'>

4.異常捕獲

出現(xiàn)異常(錯(cuò)誤)不想讓程序崩潰,就可以進(jìn)行異常捕獲
try:
需要捕獲異常的代碼
except:
出現(xiàn)異常會(huì)執(zhí)行的代碼

try:
需要捕獲異常的代碼
except 錯(cuò)誤類型:
捕獲到指定的錯(cuò)誤類型祝拯,才執(zhí)行的代碼

if __name__ == '__main__':
    try:
        with open('./aaa.txt') as f:
            print('打開(kāi)成功')
    except FileNotFoundError:
        print('===')
        with open('./aaa.txt', 'w') as f:
            pass
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末甚带,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子佳头,更是在濱河造成了極大的恐慌鹰贵,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件康嘉,死亡現(xiàn)場(chǎng)離奇詭異碉输,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)亭珍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)敷钾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人肄梨,你說(shuō)我怎么就攤上這事阻荒。” “怎么了众羡?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵侨赡,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我粱侣,道長(zhǎng)羊壹,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任甜害,我火速辦了婚禮舶掖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘尔店。我一直安慰自己眨攘,他們只是感情好主慰,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著鲫售,像睡著了一般共螺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上情竹,一...
    開(kāi)封第一講書(shū)人閱讀 51,443評(píng)論 1 302
  • 那天藐不,我揣著相機(jī)與錄音,去河邊找鬼秦效。 笑死雏蛮,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的阱州。 我是一名探鬼主播挑秉,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼苔货!你這毒婦竟也來(lái)了犀概?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤夜惭,失蹤者是張志新(化名)和其女友劉穎姻灶,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體诈茧,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡产喉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了若皱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片镊叁。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡尘颓,死狀恐怖走触,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情疤苹,我是刑警寧澤互广,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站卧土,受9級(jí)特大地震影響惫皱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜尤莺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一旅敷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧颤霎,春花似錦媳谁、人聲如沸涂滴。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)柔纵。三九已至,卻和暖如春锤躁,著一層夾襖步出監(jiān)牢的瞬間搁料,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工系羞, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留郭计,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓椒振,卻偏偏與公主長(zhǎng)得像拣宏,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子杠人,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

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