一、模塊管理函數(shù)和類
1、什么是模塊: 一個(gè).py文件就是一個(gè)模塊
2、import :可以通過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í)候還是會把模塊的內(nèi)容復(fù)制了一遍,但只能使用導(dǎo)入的內(nèi)容
from other2 import func_name1
func_name1()
5、阻止被導(dǎo)入的模塊中的不必要的代碼被粘貼到當(dāng)前模塊
一般情況下,除了函數(shù)的聲明和類的聲明以外,其他的代碼都放入if里面
name:是每個(gè)模塊自帶的一個(gè)屬性,是用來保存當(dāng)前這個(gè)模塊的名字的。
但是當(dāng)正在執(zhí)行當(dāng)前模塊的時(shí)候,這個(gè)屬性的值是固定的'main'
if __name__ =='__main__':
# 這個(gè)里面的代碼不會被其他的模塊使用
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'--讀操作(讀出來的是字符串)文件不存在會報(bào)錯(cuò)
'rb'/'br'--讀操作(讀出來的數(shù)據(jù)是二進(jìn)制)二進(jìn)制文件編碼方式不能設(shè)置
'w'--寫操作(可以將文本數(shù)據(jù)寫入文件中)文件不存在會創(chuàng)建
'wb'/'bw' --寫操作(可以將二進(jìn)制數(shù)據(jù)寫入文件中)二進(jìn)制文件編碼方式不能設(shè)置
'a' - 寫操作(追加)
編碼方式 -->主要針對文本文件的讀寫(不同的操作系統(tǒng)默認(rèn)的文本編碼方式不同windows->gbk mac->utf-8)
2、文本文件讀操作
a、放在工程外面的文件,寫絕對路徑
(推薦)b、將文件放到工程目錄下的某個(gè)位置,寫相對路徑(相對工程目錄): ./相對路徑或者../相對路徑
例如: 當(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è)置讀的長度
"""
content = f.read(2)
print(content)
content2 = f.read()
print('===', content2)
# 3、關(guān)閉文件
f.close()
3、文本文件的寫操作
1、打開文件 注意:以讀的方式打開文件,如果這個(gè)文件不存在,會報(bào)FilesNotFindError;
以寫的方式打開文件,如果這個(gè)文件不存在,就會創(chuàng)建這個(gè)文件f = open('./text.txt', 'w', encoding='utf-8')
2、寫操作(‘w’:在寫的時(shí)候會清空文件原來的內(nèi)容,然后再往里寫) ‘a(chǎn)’:在原文件內(nèi)容的最后添加新的數(shù)據(jù)
f.write('這一個(gè)測試文件,在進(jìn)行測試')
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ù)對應(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、通過with關(guān)鍵字去打開文件
格式: with open() as 文件變量名:
(一個(gè)縮進(jìn))文件操作
在文件操作結(jié)束后會自動去關(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、最外層可以是字符串,必須用雙引號
2、最外層是字典,字典里面就必須是鍵值對
3、最外層也可以是數(shù)組(列表),數(shù)據(jù)里面的內(nèi)容必須是數(shù)組數(shù)據(jù)
1、json是Python中內(nèi)置的一個(gè)模塊,專門用來處理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(文件對象):獲取指定json文件中的內(nèi)容,返回值最外層的對應(yīng)數(shù)據(jù)類型,即讀出來的數(shù)據(jù)類型為json中對應(yīng)的數(shù)據(jù)類型
json ----> python
dict--->dict
array(列表里的字符串元素必須用雙引號)--->list
string(必須用雙引號) -->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)容,文件對象)
w_content = 'abc'
json.dump(w_content, f)
# 練習(xí):輸入學(xué)生的姓名和電話,保存到本地(要求再次啟動的,再添加學(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)
#文件不存在會報(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(對象)
dumps:將json對象轉(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)識
什么是異常?
異常即是一個(gè)事件,該事件會在程序執(zhí)行過程中發(fā)生,影響了程序的正常執(zhí)行。一般情況下,在Python無法正常處理程序時(shí)就會發(fā)生一個(gè)異常。異常是Python對象,表示一個(gè)錯(cuò)誤。當(dāng)Python腳本發(fā)生異常時(shí)我們需要捕獲處理它,否則程序會終止執(zhí)行。 出現(xiàn)異常(錯(cuò)誤)不想讓程序崩潰,就可以進(jìn)行異常捕獲。
try:
需要捕獲異常的代碼(如果沒有異常,執(zhí)行完代碼塊后,直接執(zhí)行后面的其他語句。)
except:
出現(xiàn)異常會執(zhí)行的代碼
try:
需要捕獲異常的代碼,(當(dāng)有多個(gè)錯(cuò)誤的時(shí)候,如果指定的錯(cuò)誤在第一個(gè),程序不會崩潰,捕獲到第一個(gè)錯(cuò)誤就直接執(zhí)行except后面的代碼,如果指定的錯(cuò)誤沒有在第一個(gè),程序就崩潰)
except 錯(cuò)誤類型:
捕獲到指定的錯(cuò)誤類型,才會執(zhí)行的代碼
異常類型見菜鳥教程
想要捕獲多個(gè)錯(cuò)誤類型:except(錯(cuò)誤類型1,錯(cuò)誤類型2....)
try:
代碼塊1
except:
代碼塊2
finally:
代碼塊3
代碼塊3是在代碼塊1沒有異常,和代碼塊1出現(xiàn)異常并捕獲到后才執(zhí)行。
raise:拋出異常
總結(jié):1.異常捕獲不是什么都要用,只有程序員知道會出現(xiàn)異常,并想要處理異常,而不是讓程序崩潰的情況才異常捕獲。
2.使用捕獲異常的時(shí)候,不能讓except捕獲到所有的錯(cuò)誤類型,而是捕獲特定的異常。