一、模塊管理函數(shù)和類
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)容,什么模塊能用舒岸?
import 模塊名 --->導(dǎo)入模塊中所有的內(nèi)容
模塊名.函數(shù)的方式去使用模塊中的內(nèi)容
例如:
import random
random.randint()
在模塊中聲明全局變量都可以使用(普通變量绅作,函數(shù),類蛾派,global聲明的變量)
print('======')
import other201807
print('11---', other201807.__name__) # 打印的是模塊的名字
print('======')
======
10
11--- other201807
======
4俄认、 from 模塊 import 內(nèi)容1,內(nèi)容2碍脏,內(nèi)容3.梭依。稍算。典尾。--->導(dǎo)入模塊中指定的內(nèi)容
使用內(nèi)容的時(shí)候,不用在被導(dǎo)入的變量或者函數(shù)或者類前面加模塊名
使用的時(shí)候還是會(huì)把模塊的內(nèi)容復(fù)制了一遍糊探,但只能使用導(dǎo)入的內(nèi)容
from other2 import func_name1
func_name1()
5钾埂、阻止被導(dǎo)入的模塊中的不必要的代碼被粘貼到當(dāng)前模塊
一般情況下,除了函數(shù)的聲明和類的聲明以外科平,其他的代碼都放入if里面
name:是每個(gè)模塊自帶的一個(gè)屬性褥紫,是用來(lái)保存當(dāng)前這個(gè)模塊的名字的。
但是當(dāng)正在執(zhí)行當(dāng)前模塊的時(shí)候瞪慧,這個(gè)屬性的值是固定的'main'
if __name__ =='__main__':
# 這個(gè)里面的代碼不會(huì)被其他的模塊使用
pass
6髓考、使用as重命名
import 模塊名 as 新的名字
from 模塊名 import 函數(shù)名 as 新的函數(shù)名字
import math as my_math
print(my_math.pi)
二、文件基本操作
(所有)文件操作流程:打開文件--->操作文件(讀/寫)--->
關(guān)閉文件
1弃酌、打開文件:open(文件路徑氨菇,打開的方式,編碼方式)
文件路徑 (必填)--->決定打開哪個(gè)文件
文件打開的方式(默認(rèn)值是'r')--->決定打開文件后是進(jìn)行什么操作
'r'--讀操作(讀出來(lái)的是字符串)文件不存在會(huì)報(bào)錯(cuò)
'rb'/'br'--讀操作(讀出來(lái)的數(shù)據(jù)是二進(jìn)制)二進(jìn)制文件編碼方式不能設(shè)置
'w'--寫操作(可以將文本數(shù)據(jù)寫入文件中)文件不存在會(huì)創(chuàng)建
'wb'/'bw' --寫操作(可以將二進(jìn)制數(shù)據(jù)寫入文件中)二進(jìn)制文件編碼方式不能設(shè)置
'a' - 寫操作(追加)
編碼方式 -->主要針對(duì)文本文件的讀寫(不同的操作系統(tǒng)默認(rèn)的文本編碼方式不同windows->gbk mac->utf-8)
2妓湘、文本文件讀操作
a查蓉、放在工程外面的文件,寫絕對(duì)路徑
(推薦)b榜贴、將文件放到工程目錄下的某個(gè)位置豌研,寫相對(duì)路徑(相對(duì)工程目錄): ./相對(duì)路徑或者../相對(duì)路徑
例如: 當(dāng)py文件直接放在工程目錄下,想要使用open打開工程中的其他文件使用'./',當(dāng)py文件在工程目錄的子目錄下面鹃共,想要使用open打開工程中的其他文件使用'./'
open('./files/text.txt')
# 1鬼佣、打開文件
# 打開文件,返回文件句柄(文件代言人)
f = open('./files/text.txt', 'r', encoding='utf-8')
# 2及汉、讀文件(獲取文件的內(nèi)容)
"""
文件.read():獲取文件內(nèi)容沮趣,并且返回
read(n)--->n 設(shè)置讀的長(zhǎng)度
"""
content = f.read(2)
print(content)
content2 = f.read()
print('===', content2)
# 3、關(guān)閉文件
f.close()
3坷随、文本文件的寫操作
1房铭、打開文件 注意:以讀的方式打開文件,如果這個(gè)文件不存在温眉,會(huì)報(bào)FilesNotFindError;
以寫的方式打開文件缸匪,如果這個(gè)文件不存在,就會(huì)創(chuàng)建這個(gè)文件f = open('./text.txt', 'w', encoding='utf-8')
2类溢、寫操作(‘w’:在寫的時(shí)候會(huì)清空文件原來(lái)的內(nèi)容凌蔬,然后再往里寫) ‘a(chǎn)’:在原文件內(nèi)容的最后添加新的數(shù)據(jù)
f.write('這一個(gè)測(cè)試文件,在進(jìn)行測(cè)試')
3闯冷、關(guān)閉文件
f.close()
4砂心、二進(jìn)制文件的讀寫操作
音頻、視頻蛇耀、圖片文件辩诞,都是二進(jìn)制文件
g = open('./files/photo.png', 'rb')
image_data = g.read()
# bytes:python中二進(jìn)制數(shù)據(jù)對(duì)應(yīng)的數(shù)據(jù)類型
print(type(image_data), image_data)
g.close()
"""二進(jìn)制文件的寫操作"""
f = open('./files/new.png')
f.write(image_data)
f.close()
4、通過(guò)with關(guān)鍵字去打開文件
格式: with open() as 文件變量名:
(一個(gè)縮進(jìn))文件操作
在文件操作結(jié)束后會(huì)自動(dòng)去關(guān)閉文件
# 讀(以二進(jìn)制格式打開)
with open('./files/photo.png', 'rb') as f:
png_data = f.read()
# 寫(以二進(jìn)制格式打開)
with open('./files/photo.png', 'wb') as g:
png_data1 = g.read()
三纺涤、json文件
json文件(文本)译暂,就是文件后綴是.json的文件。內(nèi)容必須是json的格式
json格式:最外層是一個(gè)元素
1撩炊、最外層可以是字符串外永,必須用雙引號(hào)
2、最外層是字典拧咳,字典里面就必須是鍵值對(duì)
3伯顶、最外層也可以是數(shù)組(列表),數(shù)據(jù)里面的內(nèi)容必須是數(shù)組數(shù)據(jù)
1骆膝、json是Python中內(nèi)置的一個(gè)模塊祭衩,專門用來(lái)處理json數(shù)據(jù)的
import json
1、json文件的讀操作
打開json文件
with open('./test.json', 'r', encoding='utf-8') as f:
直接使用read去讀谭网,獲取到的是字符串?dāng)?shù)據(jù)汪厨,包含json所有的內(nèi)容(包括注釋)
load(文件對(duì)象):獲取指定json文件中的內(nèi)容,返回值最外層的對(duì)應(yīng)數(shù)據(jù)類型,即讀出來(lái)的數(shù)據(jù)類型為json中對(duì)應(yīng)的數(shù)據(jù)類型
json ----> python
dict--->dict
array(列表里的字符串元素必須用雙引號(hào))--->list
string(必須用雙引號(hào)) -->str
number --->int/float
true/false-->True/False
null --->none
content = json.load(f)
print(content, type(content), content['name'])
{'name': 'dsa', 'age': 123} <class 'dict'> dsa
2愉择、json文件的寫操作
python基本數(shù)據(jù)類型都可以直接寫到j(luò)son文件中
with open('./new.json', 'w', encoding='utf-8') as f:
# 寫數(shù)據(jù)
dump(寫的內(nèi)容劫乱,文件對(duì)象)
w_content = 'abc'
json.dump(w_content, f)
# 練習(xí):輸入學(xué)生的姓名和電話织中,保存到本地(要求再次啟動(dòng)的,再添加學(xué)生信息的時(shí)候衷戈,之間添加的信息還在)
name = input('名字:')
tel = input('電話:')
student = {'name': name, 'tel': tel}
old_data = []
with open('./students.json', 'r', encoding='utf-8') as g:
old_data = json.load(f)
old_data.append(student)
with open('./students.json', 'w', encoding='utf-8') as g:
json.dump(old_data, g)
#文件不存在會(huì)報(bào)錯(cuò)
3狭吼、json模塊的其他操作
loads(字符串,編碼方式)-->將指定的字符串(json字符串)殖妇,轉(zhuǎn)化成json數(shù)據(jù)將字符串轉(zhuǎn)換成字典\將字符串轉(zhuǎn)換成列表
content1 = json.loads('"abcde"', encoding='utf-8')
print(content1, type(content1))
abcde <class 'str'>
dumps(對(duì)象)
dumps:將json對(duì)象轉(zhuǎn)換成json字符串
字典/列表轉(zhuǎn)換成json字符串
content3 = json.dumps(['abcde', 1, True, [1, 2, 3]])
#content3 = '["abcde", 1, true, [1, 2, 3]]'
print(content3, type(content3))
["abcde", 1, true, [1, 2, 3]] <class 'str'>
四刁笙、異常捕獲 初步認(rèn)識(shí)
什么是異常?
異常即是一個(gè)事件谦趣,該事件會(huì)在程序執(zhí)行過(guò)程中發(fā)生疲吸,影響了程序的正常執(zhí)行。一般情況下前鹅,在Python無(wú)法正常處理程序時(shí)就會(huì)發(fā)生一個(gè)異常摘悴。異常是Python對(duì)象,表示一個(gè)錯(cuò)誤舰绘。當(dāng)Python腳本發(fā)生異常時(shí)我們需要捕獲處理它蹂喻,否則程序會(huì)終止執(zhí)行。 出現(xiàn)異常(錯(cuò)誤)不想讓程序崩潰捂寿,就可以進(jìn)行異常捕獲口四。
try:
需要捕獲異常的代碼(如果沒有異常,執(zhí)行完代碼塊后秦陋,直接執(zhí)行后面的其他語(yǔ)句蔓彩。)
except:
出現(xiàn)異常會(huì)執(zhí)行的代碼
try:
需要捕獲異常的代碼,(當(dāng)有多個(gè)錯(cuò)誤的時(shí)候踱侣,如果指定的錯(cuò)誤在第一個(gè)粪小,程序不會(huì)崩潰大磺,捕獲到第一個(gè)錯(cuò)誤就直接執(zhí)行except后面的代碼抡句,如果指定的錯(cuò)誤沒有在第一個(gè),程序就崩潰)
except 錯(cuò)誤類型:
捕獲到指定的錯(cuò)誤類型杠愧,才會(huì)執(zhí)行的代碼
異常類型見菜鳥教程
想要捕獲多個(gè)錯(cuò)誤類型:except(錯(cuò)誤類型1待榔,錯(cuò)誤類型2....)
try:
代碼塊1
except:
代碼塊2
finally:
代碼塊3
代碼塊3是在代碼塊1沒有異常,和代碼塊1出現(xiàn)異常并捕獲到后才執(zhí)行流济。
raise:拋出異常
總結(jié):1.異常捕獲不是什么都要用锐锣,只有程序員知道會(huì)出現(xiàn)異常,并想要處理異常绳瘟,而不是讓程序崩潰的情況才異常捕獲雕憔。
2.使用捕獲異常的時(shí)候,不能讓except捕獲到所有的錯(cuò)誤類型糖声,而是捕獲特定的異常斤彼。