tft每日頭條

 > 生活

 > python高亮

python高亮

生活 更新时间:2025-01-25 17:16:02

1 說明

1.1 python的基礎知識:枯燥,網上一大堆,對于新手來說,一片茫然。

1.2 主要講:列表和字典及操作(切片和定位),列表如何轉換字符串等。

1.3 本機:python3.8和微軟vscode,親測。

1.4 本機背景音樂:夢然的少年和歌詞lrc。

1.5 部分代碼和音樂來源網絡(不明),本人進行整理和加工,僅供學習,如有侵權請告知,定會删除。

python高亮(用終端顯示歌詞的方法來實戰學習python的基礎知識)1

值得收藏

2 文件架構

python高亮(用終端顯示歌詞的方法來實戰學習python的基礎知識)2

3 歌詞在py代碼内的:

3.1 lrcter.py代碼:

#考慮手機的可閱讀性,注釋全部單獨一行 #---導出模塊--- import time import pygame #---獲得歌詞字典函數--- def get_music_dict(musiclrc): """ :param(參數)是: musiclrc: 歌詞字符串 :return: 時間與歌詞對應的字典 """ # 創建一個空字典,用來裝 時間(key) 和 歌詞(value) dictmusic = {} # 按照行進行切割 把每一行變成列表的一個元素 listline1 = musiclrc.splitlines() # 把每一行元素遍曆出來,準備切割 for i in listline1: # 以 ] 為切割符 listline2 = i.split("]") # 每一次遍曆 把歌詞元素(每一次遍曆都是最後一個) 賦值給 value value = listline2[-1] for j in range(len(listline2)-1): # 遍曆 listLine2 len(listLine2)-1 除去最後的非時間字符串(歌詞) keymusic = listline2[j][1:] # [1:]從索引值為1開始取目的是除去 [ # [1:]從索引值為1開始取目的是除去 [ 如果有縮進的話 需要用strip()去除空格 方案二 # keymusic = listline2[j].strip()[1:] # 對遍曆的的時間字符串以冒号進行切割 keytime = keymusic.split(":") # 計算出每個時間的總秒數 musictime = float(keytime[0])*60 float(keytime[1]) # 把時間賦值給字典中的 key key = musictime # 把value 賦值給對應的時間 key dictmusic[key] = value return dictmusic #---打印輸出歌詞函數--- def print_music_dict(dictmusic): """ :param(參數) dictmusic:時間與歌詞對應的字典 """ # 創建空列表,把字典的key寫進去 listmuscitime = [] for keys in dictmusic.keys(): listmuscitime.append(keys) # 默認對列表進行升序 listmuscitime.sort() time.sleep(listmuscitime[0]) for index in range(len(listmuscitime)): if index > 0: # 兩段歌詞之間的時間 time.sleep((listmuscitime[index]-listmuscitime[index-1])) # 對列表裡面的key值下标遍曆,進而用get取字典的value print(dictmusic.get(listmuscitime[index])) #---主函數--- def main(): musiclrc = ''' [00:00.00]少年 - 夢然 [00:01.62]詞:夢然 [00:02.35]曲:夢然 [00:03.02]編曲:張亮 [00:03.87]制作人:張亮/徐閣 [00:05.43]和聲編寫:海青/夢然 [00:07.06]和聲演唱:海青/夢然 [00:08.62]混音工程師:趙靖 [00:09.88]母帶工程師:趙靖 [00:11.28]監制:夢然 [00:22.39]換種生活 [00:23.24]讓自己變得快樂 [00:24.87]放棄執着 [00:25.78]天氣就會變得不錯 [00:27.54]每次走過 [00:28.79]都是一次收獲 [00:30.20]還等什麼 做對的選擇 [00:32.94]過去的 [00:33.66]就讓它過去吧 [00:35.58]别管那是一個玩笑還是謊話 [00:38.26]路在腳下 [00:39.44]其實并不複雜 [00:40.81]隻要記得你是你呀 [00:43.56]Wu oh oh [00:53.83]Wu oh oh [01:03.91]我還是從前那個少年 [01:06.72]沒有一絲絲改變 [01:09.33]時間隻不過是考驗 [01:12.01]種在心中信念絲毫未減 [01:15.59]眼前這個少年 [01:17.28]還是最初那張臉 [01:20.03]面前再多艱險不退卻 [01:23.17]Say never never give up [01:25.10]Like a fighter [01:26.30]Wu oh oh [01:37.02]換種生活 [01:37.99]讓自己變得快樂 [01:39.53]放棄執着 [01:40.44]天氣就會變得不錯 [01:42.19]每次走過 [01:43.40]都是一次收獲 [01:44.73]還等什麼 做對的選擇 [01:47.48]過去的 [01:48.32]就讓它過去吧 [01:50.20]别管那是一個玩笑還是謊話 [01:52.91]路在腳下 [01:54.05]其實并不複雜 [01:55.49]隻要記得你是你呀 [02:08.99]Miya miya miya miya miya [02:13.36]Call me [02:13.99]Miya miya miya miya miya [02:18.55]我還是從前那個少年 [02:21.25]沒有一絲絲改變 [02:23.88]時間隻不過是考驗 [02:26.71]種在心中信念絲毫未減 [02:30.24]眼前這個少年 [02:31.94]還是最初那張臉 [02:34.68]面前再多艱險不退卻 [02:37.77]Say never never give up [02:39.65]Like a fighter [02:41.02]追逐生命裡光臨身邊的每道光 [02:43.41]讓世界因為你的存在變的閃亮 [02:46.06]其實你我他并沒有什麼不同 [02:48.70]隻要你願為希望畫出一道想象 [02:51.53]成長的路上必然經曆很多風雨 [02:54.15]相信自己終有屬于你的盛舉 [02:56.85]别因為磨難 停住你的腳步 [02:59.33]堅持住 就會擁有屬于你的藍圖 [03:02.14]Wu oh oh [03:11.67]我還是從前那個少年 [03:14.57]沒有一絲絲改變 [03:17.38]時間隻不過是考驗 [03:20.01]種在心中信念絲毫未減 [03:23.59]眼前這個少年 [03:25.29]還是最初那張臉 [03:28.06]面前再多艱險不退卻 [03:31.27]Say never never give up [03:33.12]Like a fighter [03:33.76]我還是從前那個少年miya [03:38.43]我還是從前那個少年miya [03:43.78]我還是眼前這個少年miya [03:49.07]我還是從前那個少年miya''' pygame.mixer.init() # 初始化音頻部分 #音樂文件和地址,可自定義 #path = r"/home/xgj/Desktop/pythonsn/sn.mp3" # 音頻絕對地址 path = "/home/xgj/Desktop/pythonsn/sn.mp3" # 音頻絕對地址 pygame.mixer.music.load(path) pygame.mixer.music.play() get_music_dict(musiclrc) dictmusic = get_music_dict(musiclrc) print_music_dict(dictmusic) #延遲300,否則擠在一起 time.sleep(300) if __name__ == '__main__': main()

3.2 以上有列表和字典的基礎操作,逐個分析和品味。

3.3 細節:字符串的大段注釋法:3個引号法(3個單引号or雙引号,作用一樣),因為省去了換行符\n。

3.4 這種操作,不符合人們的常規操作習慣,而且代碼量變多了。

==========================

4 讀取lrc或者txt的歌詞文件的

4.1 lrcpy.py的代碼:

import time import pygame def get_music_dict(musiclrc): dictmusic = {} listline1 = musiclrc.splitlines() for i in listline1: listline2 = i.split("]") value = listline2[-1] for j in range(len(listline2)-1): keymusic = listline2[j][1:] keytime = keymusic.split(":") musictime = float(keytime[0])*60 float(keytime[1]) key = musictime dictmusic[key] = value return dictmusic def print_music_dict(dictmusic): listmuscitime = [] for keys in dictmusic.keys(): listmuscitime.append(keys) listmuscitime.sort() time.sleep(listmuscitime[0]) for index in range(len(listmuscitime)): if index > 0: time.sleep((listmuscitime[index]-listmuscitime[index-1])) print(dictmusic.get(listmuscitime[index])) def main(): #---以上相同--- # 打開文件 #file = open("/home/xgj/Desktop/pythonsn/sn.txt", "r", encoding="utf-8") #一樣的 file = open("/home/xgj/Desktop/pythonsn/sn.lrc", "r", encoding="utf-8") # 讀取文件全部内容 lrc_list = file.readlines() #将列表轉換為字符串 musiclrc=''.join(lrc_list) file.close() #---以下相同--- pygame.mixer.init() # 初始化音頻部分 path = "/home/xgj/Desktop/pythonsn/sn.mp3" # 音頻絕對地址 pygame.mixer.music.load(path) pygame.mixer.music.play() get_music_dict(musiclrc) dictmusic = get_music_dict(musiclrc) print_music_dict(dictmusic) time.sleep(300) if __name__ == '__main__': main()

4.2 為了突出重點,與代碼3相同部分注釋去掉。

4.3 采用讀取lrc和txt文件,注意自己的目錄和路徑,可自定義。

4.4 這種還不是最好的文件操作,推薦with法,發現沒有,更簡潔,且無file.close()或者f.close();

因為上述代碼中如果沒有close,那麼一直在内存中,占用大量内存。

4.5 讀取lrc和txt文件是一樣的。

#---以上相同--- # 打開文件 with open("/home/xgj/Desktop/pythonsn/sn.lrc","r") as f: lrc_list = f.readlines() #将列表轉換為字符串,重點講解 musiclrc=''.join(lrc_list) #---以下相同---

5 列表轉換為字符串。

#将列表轉換為字符串 ls1 = ['x', 10, 'y', 20] #發現列表1中有字符串,也有數字int #将列表1中的字符串和數字都轉換為字符串,存入列表2中 ls2 = [str(i) for i in ls1] print(ls2) #得到 #['x', '10', 'y', '20'] #4個獨立的字符串并未一個字符串,存入列表3中 ls3 = ''.join(ls2) print(ls3) #打印列表3,得到 #'x10y20'

為什麼要這麼做?因為在3.1 lrcter.py代碼中musiclrc = '''xxx''',是作為一個字符串出現的。

自己整理出來的,分享給大家。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved