一 模塊管理和類函數(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)容,以及什么內(nèi)容是可以用的
import 模塊名 ----》導(dǎo)入模塊中的所有內(nèi)容
模塊名.
在模塊中聲明全局變量都可以使用(普通變量,函數(shù),類)
模塊:
name = 10
print(__name__)
def func_other():
print('nihao')
調(diào)用模塊和模塊中的內(nèi)容
import other
print(other.name)
print('===')
print(other.func_other(), other.name)
結(jié)果:
other
10
===
nihao
None 10
4.from 模塊 import 內(nèi)容1,內(nèi)容2... ----》導(dǎo)入模塊中指定的內(nèi)容
使用內(nèi)容的時(shí)候,不用在被導(dǎo)入的變量或者函數(shù)或者類的前面加模塊名
模塊;
def func2():
print('~~~~')
return 100
在這里寫當(dāng)前模塊不需要被他模塊導(dǎo)入和其粘貼的代碼
if __name__ == '__main__':
name = 1010
print(name)
導(dǎo)入模塊內(nèi)容:
from other2 import func2
func2()
結(jié)果:
~~~~
5.阻止被導(dǎo)入的模塊中的代碼被粘貼到當(dāng)前模塊
一般情況下,除了函數(shù)的聲明和類的聲明以外,其他的代碼都需要放到這個(gè)if里面
name:是每一個(gè)模塊自帶的屬性,是用來保存當(dāng)前模塊的名字的.
當(dāng)正在執(zhí)行當(dāng)前模塊的時(shí)候,這個(gè)屬性的值是固定的'main',也就是'name'變成了'main'
if name == 'main':
# 這里面的代碼不會(huì)被其他模塊使用
pass
6.使用as重命名
import 模塊名 as 新的名字
form 模塊名 import 函數(shù)名 as 新的函數(shù)名
import math as my_math
print(my_math.pi)
from random import randint as my_rand
print(my_rand(1, 10))
結(jié)果:
3.141592653589793
4
二 文件操作
(所有)文件操作流程:打開文件-》操作文件(讀寫)-》關(guān)閉文件
1.打開文件 :open(文件路徑,打開的方式,編碼方式)
文件路徑(必填)---》決定打開哪個(gè)文件
打開方式(默認(rèn)值是‘r’)---》決定打開文件后是進(jìn)行什么樣的操作
‘r’ -讀操作(讀出來是字符串)
‘rb’/'br' - 讀操作(讀出來的是二進(jìn)制)
‘w’ - 寫操作(可以將文本數(shù)據(jù)寫入文件中)
‘wb’/'bw' - 寫操作(將二進(jìn)制數(shù)據(jù)寫入文件中)
‘a(chǎn)’ - 寫操作(追加)
‘+’ - 更新
文本編碼編碼方式 ---》 主要針對(duì)文件的讀寫(不用的操作系統(tǒng)默認(rèn)的方式不同,Windows->gbk,mac->utf-8)
if name == 'main':
pass
2. 文本文件讀寫
a.放在工程里面的文件,寫絕對(duì)路徑
open()
(推薦)
b.將文件放到工程目錄下的某個(gè)位置,寫相對(duì)路徑(相當(dāng)于工程目錄):./相對(duì)路徑 或者 :/相對(duì)路徑
當(dāng)你的py文件直接放在工程下,想要使用open打開工程中的其他文件使用'./'
當(dāng)py文件在工程目錄的子目錄下面,想要用open打開工程中的其他文件使用'../'
open('./test1.txt') #在工程目錄下
在工程目錄下的子目錄下 open('./子目錄/文件名')
在工程目錄下的子目錄下的子目錄下 open('./子目錄/子目錄的子目錄/文件名')
1.打開文件
打開文件,返回文件句柄(文件代言人)
f = open('./test1.txt', 'r', encoding='utf_8')
2.文件文件的讀操作('r'讀文件(獲取文件內(nèi)容))
文件.red() : 獲取文件內(nèi)容,并且返回
red(n) --> n 設(shè)置讀的長度
content = f.read()
print(content)
3.關(guān)閉文件 : 文件句柄.close()
f.close()
3.文本文件的寫操作
打開文件
注意:以讀的方式打開,如果這個(gè)文件不存在,回報(bào)錯(cuò)
以寫的方式打開,如果這個(gè)文件不存在,就會(huì)創(chuàng)建這個(gè)文件
f = open('./test1.txt', 'w', encoding='utf-8')
寫:文件句柄.write
'w':在寫的時(shí)候會(huì)清空文件原來的內(nèi)容,然后再往里面添加數(shù)據(jù)
'a': 在原文件內(nèi)容的最后添加新的數(shù)據(jù)
content = f.write('我好想你')
print(content)
關(guān)閉文件
f.close()
4.二進(jìn)制文件的讀寫
音頻、視頻、圖片文件、都是二進(jìn)制文件
讀
f = open('./11125412N-4.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()
二進(jìn)制文件的寫操作
f = open('./new.jpg', 'wb')
f.write(image_data)
f.close()
5.通過with關(guān)鍵字取打開文件
with open() as 文件變量名:
文件操作
在文件操作結(jié)束后會(huì)自動(dòng)去關(guān)閉文件(省去一個(gè) .close)
with open('./files/一人之下.mp4','rb') as f:
mp4_data = f.read()
寫
with open('./new.mp4','wb') as f:
f.write(mp4_data)
最后輸出結(jié)果
我好想你
4
<class 'bytes'> b' h后面是一大堆的存儲(chǔ)的二進(jìn)制就不輸出了
三 json文件
數(shù)據(jù)本地化:將數(shù)據(jù)保存到本地
json文件(文本文件),就是文件后綴是.json的文件。內(nèi)容必須是是json格式的內(nèi)容
json格式:
1.內(nèi)容是字符串
2.最外層是字典,字典里面是必須是鍵值對(duì)
3.最外層是數(shù)組(列表),數(shù)組里面的內(nèi)容必須是數(shù)組元素
json數(shù)據(jù)類型;
//最外面只能是一個(gè)字典,一個(gè)數(shù)組,一個(gè)字符串
//支持的數(shù)據(jù)類型:字符串("abc"),數(shù)字(100,33),布爾值(true,false)
//數(shù)組([1,23,"abc"]),字典({"key":"value"})
//null(None)
json是Python中內(nèi)置的一個(gè)模塊,專門用來處理json數(shù)據(jù)的
if name == 'main':
import json #每次需要Python的內(nèi)置函數(shù)的時(shí)候,都要導(dǎo)入模塊
1.json文件的讀操作
with open('./test.json', 'r', encoding='utf-8') as f:
直接使用red去讀獲取到的字符串?dāng)?shù)據(jù),包含了json文件中的所有內(nèi)容(包含字符串)
content = f.read()
print(conten,type(conten))
load(文件對(duì)象):獲取指定json文件中的內(nèi)容,返回值就是json文件最外層的對(duì)應(yīng)的數(shù)據(jù)類型
object ---> dict
array ---> list
string ---> str
number ---> int/float
true/false ---> True/False
null ---> None
contentn = json.load(f)
print(contentn, type(contentn), contentn["score"][1])
2.json文件的寫操作
with open('./new.json', 'w', encoding='utf-8') as f:
打開文件
dump(寫的內(nèi)容,文件對(duì)象)
w_count = [
{'name': 'a1', 'age': 18}, {'name': 'a2', 'age': 10}]
json.dump(w_count, f)
練習(xí):輸入學(xué)生的姓名和年齡,保存到本地(下次打開還在)
name = input('名字:')
tel = input('電話:')
student = {'name': name, 'tel': tel}
try:
with open('./student.json', 'r', encoding='utf-8') as f:
all_student = json.load(f)
except FileNotFoundError:
all_student = []
all_student.append(student)
with open('./student.json', 'w', encoding='utf-8') as f:
json.dump(all_student, f)
3.json模塊的其他操作
loads(字符串,編碼方式) ---》 將指定的字符串,轉(zhuǎn)換成json
將字符串轉(zhuǎn)換成字典\將字符串轉(zhuǎn)換成列表
content = json.loads('"abc"',encoding='utf-8')
print(content,type(content))
dumps(對(duì)象)
將對(duì)象轉(zhuǎn)換成json字符串
字典/列表轉(zhuǎn)換成符合json語法的json字符串(在Python中還是str)
content = json.dumps(['aaa',1,True])
# content = '["aaa",1,True]'
print(content,type(content))
四 異常捕獲
出現(xiàn)異常(錯(cuò)誤)不想讓程序錯(cuò)誤,
try:
需要捕獲異常的代碼
except:
出現(xiàn)異常會(huì)執(zhí)行的代碼
try:
需要捕獲的代碼
except:錯(cuò)誤類型
捕獲到指定的錯(cuò)誤類型,才會(huì)執(zhí)行的代碼
if __name__ == '__main__':
try:
with open('./aaa.txt') as ff:
print('打開成功')
except FileNotFoundError:
print('===')
open('./aaa.txt','w')
打開成功