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
- 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