day09 Python文件操作,json文件操作,try異常捕獲

一、模塊管理函數(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ò)誤類型,而是捕獲特定的異常。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,694評論 19 139
  • 一、快捷鍵 ctr+b 執(zhí)行ctr+/ 單行注釋ctr+c ...
    o_8319閱讀 6,046評論 2 16
  • 一、Python簡介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡介】: Python 是一個(gè)...
    _小老虎_閱讀 6,353評論 0 10
  • 鳥音婉轉(zhuǎn),有如天籟,不覺駐足。 陽光透過濃密的枝椏漏下點(diǎn)點(diǎn)光斑于湖面,鳥聲便是從此處流出。一女子在湖邊石階上浣衣。...
    M四月M閱讀 243評論 0 1
  • 緩緩的睜開眼睛,映入眼簾的是一片生機(jī)盎然的世界,陽光是如此璀璨,空氣是如此的清晰,深深的呼吸了氧吧般的空氣?!斑@難...
    風(fēng)中搖曳的星星閱讀 378評論 0 0

友情鏈接更多精彩內(nèi)容