1.文件操作
a.操作流程:打開文件(open)-操作文件-關(guān)閉文件(close)
with open() as 文件變量名:
文件操作
open(文件路徑,打開方式,encoding = 編碼方式)
b.打開方式
r/rb/br:讀
w/wb/bw/a:寫,當文件路徑不存在的時候回自動創(chuàng)建那個文件
c.編碼方式
文本編碼,二進制不能去設(shè)置
d.讀(read)、寫(write)
e.json文件/json數(shù)據(jù)
json數(shù)據(jù)的格式:只有一個數(shù)據(jù),并且類型必須是json支持得了的數(shù)據(jù)類型
數(shù)據(jù)類型及其表現(xiàn):數(shù)組、對象(字典)、數(shù)字、符號、布爾
python對json的支持:
load(文件對象:獲取json文件中的數(shù)據(jù),并且轉(zhuǎn)換成相應(yīng)的python數(shù)據(jù))
loads(合適的字符串):將字符串轉(zhuǎn)換成python數(shù)據(jù)
jump():將python數(shù)據(jù)轉(zhuǎn)換成json數(shù)據(jù)然后再寫到j(luò)son文件中
dumps():將python數(shù)據(jù)轉(zhuǎn)換成json格式的字符串
f.數(shù)據(jù)本地化和持久化
將數(shù)據(jù)number的值轉(zhuǎn)數(shù)據(jù)本地化
先從本地去取值---->對取出來的值進行處理---->再將新的值存到本地
2.異常捕獲
try:
需要捕獲異常的代碼
except:
異常發(fā)生
finally:
不管異常發(fā)不發(fā)生,都執(zhí)行
a.except: 捕獲所有異常 b.except 類型名: 捕獲指定的異常(這個結(jié)構(gòu)可以出現(xiàn)多次)
c.except (類型名1, 類型名2...):
拋出異常
raise 異常類型
異常類型:要求必須是Exception的子類
3.類和對象
1.概念
類:具有相同功能和屬性的集合(抽象的)
對象:類的實例(具體)
2.類的聲明
class 類名(父類):
類的說明文檔
類的內(nèi)容
3)**創(chuàng)建對象
a.格式:對象 = 類名()
b.通過調(diào)用構(gòu)造方法創(chuàng)建對象的時候,會自動調(diào)用init方法去對對象進行初始化
c.init方法的傳參
4)屬性
對象屬性:
a.init方法中聲明,self.屬性名 = 值
b.通過對象去使用
c.對象屬性的增刪(了解), 獲取對象屬性的值和修改對象屬性值(掌握)---> 對象.屬性
類的字段:
a.直接聲明在類中的變量
b.通過類去使用 --> 類.字段
私有化、保護類型(getter和setter)等 ----> 能掌握最好
5)方法
對象方法:
a.直接聲明在類的方法
b.自帶一個self參數(shù)(self不需要傳參,指向當前對象)
c.對象方法通過對象調(diào)用
d.需要使用對象的屬性才用對象方法
類方法:
a.@classmethod修飾
b.自帶一個cls參數(shù)(cls不需要傳參,指向當前類)
c.類方法通過類調(diào)用
d.需要使用類的字段的時候使用類方法
靜態(tài)方法:
a.@staticmethod修飾
b.沒有自帶參數(shù)
c.通過類來調(diào)用
d.不需要對象屬性的時候就可以使用
本質(zhì)上,python中的類可以調(diào)用類中所有的方法
4類的補充
1.多繼承
python中的類支持多繼承,但是不建議使用
多繼承繼承的時候,子類可以擁有父類的所有的方法和類的字段,但是只能繼承第一個父類的對象屬性
2.多態(tài)
多態(tài)指的是一種事物有多種形態(tài)
有繼承就有多態(tài):不同類繼承自同一個類,其實就是對這個共同的父類的不同的形態(tài),繼承后對方法的重寫也是多態(tài)的表現(xiàn)
3.封裝、繼承、多態(tài)
封裝:一個類可以通過不同的方法對不同的功能進行封裝,通過屬性對不同的數(shù)據(jù)進行封裝
繼承:通過繼承可以讓子類擁有父類的屬性和方法
4.包
將多個模塊封裝到一起,就是包。包就是有一個默認文件init.py的文件夾
a.import 包.模塊
import download.saveData
download.saveData.save_data_json('abc')
b.from 包 import 模塊
from download import downloadData
downloadData.http_downoad('一人之下')
c.from 包.模塊 import 方法/變量/類
from download.saveData import insert_db
insert_db('賬號')
- raise 錯誤類型
raise可以讓程序主動崩潰,一般用于調(diào)試
raise:關(guān)鍵字
錯誤類型:必須是一個類,并且這個類是Exception的子類
歌詞解析
class Lyric:
def __init__(self,time,word):
self.time = time
self.word = word
def __str__(self):
return "%.2f %s" % (self.time,self.word)
def __gt__(self, other):
return self.time >other.time
class LyricAnalysis:
"""歌詞解析類"""
def __init__(self,song_name):
#一個歌詞解析器對象對應(yīng)一首歌
self.song_name = song_name
#一首歌對應(yīng)一個容器
self.all_lyric = []
#解析歌詞
self.collect_lyric()
def get_time_word(self,content):
contents = content.split("]")
word = contents[-1]
for time in contents[:-1]:
times = time[1:].split(":")
fen = float(times[0])
miao = float(times[1])
new_time = fen*60 + miao
# print(new_time,word)
#根據(jù)時間和詞創(chuàng)建歌詞對象
lyric = Lyric(new_time,word)
self.all_lyric.append(lyric)
def collect_lyric(self):
"""將時間和詞提取出來"""
try:
with open("./files/%s.txt" % self.song_name,"r",encoding="utf-8") as f:
line = f.readline()
while line:
#將每一行的內(nèi)容和詞顯示出來
self.get_time_word(line)
line = f.readline()
#排序
self.all_lyric.sort(reverse=True)
# for lyric in self.all_lyric:
# print(lyric)
except:
print("文件不存在")
def get_word(self,time):
for lyric in self.all_lyric:
if lyric.time <= time:
return lyric.word
song1 = LyricAnalysis("藍蓮花")
song1.collect_lyric()
print(song1.get_word(20))
輸出:
你的心了無牽掛