python获取文件名不含后缀名_大部分Python资料都没有说到的重点-用实战教你解决问题的思路...
前言
最近有些剛?cè)腴TPython的小伙伴問(wèn)我,他已經(jīng)學(xué)會(huì)了大部分語(yǔ)法,基本的列表,元組也會(huì)使用,但是在實(shí)際中需要做一點(diǎn)小需求的時(shí)候,仍然不知所措。
解決問(wèn)題重要的并非是如何寫(xiě)代碼,而是如何分析和拆解問(wèn)題,因此編程的思路變得非常重要。
本文以一個(gè)小需求為例子,講解從分析思路,到編寫(xiě)代碼,整個(gè)流程的細(xì)節(jié),希望能讓你得到更快速的水平提升。
本文重點(diǎn)
分析問(wèn)題的思路。實(shí)現(xiàn)細(xì)節(jié)的關(guān)鍵點(diǎn)。需求變動(dòng)時(shí)的應(yīng)對(duì)。
需求
我們從這樣的一個(gè)小需求開(kāi)始:某個(gè)文件夾中存在一系列電視劇的視頻文件,目的是把這些文件名字按規(guī)則轉(zhuǎn)成其他的形式。
如下圖,左邊為原始文件名,右邊是修改后的文件名:
別沖動(dòng),分析一下問(wèn)題,能更高效解決問(wèn)題
初學(xué)者很容易犯的一個(gè)錯(cuò)誤是,遇到一個(gè)需求,沒(méi)有進(jìn)行分析直接就寫(xiě)代碼。嘗試一鼓作氣地完成。但往往會(huì)出現(xiàn)以下問(wèn)題:
無(wú)法連貫編寫(xiě)代碼,編寫(xiě)過(guò)程總是會(huì)遇到小問(wèn)題。寫(xiě)出來(lái)一大片代碼,完全沒(méi)有重點(diǎn),自己看過(guò)去似乎也看不太懂。就像一篇沒(méi)有分段,大雜燴的文章一樣。一旦需要修改某些地方,就會(huì)出現(xiàn)莫名其妙的錯(cuò)誤,也很難查出問(wèn)題原因。別怕,下面我們就一起來(lái)看看如何分析問(wèn)題。
拆解
想想需求的描述,首先需要一個(gè)"從文件夾中找出視頻文件名字"這樣的功能。
函數(shù)名字 get_file_names ,其中函數(shù)名字體現(xiàn)了函數(shù)返回的是文件名字的序列。我們需要告訴他是從哪個(gè)文件夾中尋找文件,因此有一個(gè)參數(shù) folder 。注意,這個(gè)函數(shù)返回的文件名是不包含后綴名。不要急著去實(shí)現(xiàn)他,先寫(xiě)個(gè) pass ,后續(xù)再回頭來(lái)實(shí)現(xiàn)即可。
下一個(gè)功能是"把一個(gè)文件名字轉(zhuǎn)成其他形式的新名字"。
函數(shù)名字 get_new_name 。需要傳入一個(gè)文件名字讓函數(shù)處理。返回的就是結(jié)果的文件名。注意,這個(gè)函數(shù)只是負(fù)責(zé)處理單個(gè)的文件名字。最后,需要一個(gè)負(fù)責(zé)修改文件名的函數(shù)即可。如下:
folder 參數(shù)是文件所在目錄路徑。org_name 參數(shù)是原文件名字。new_name 參數(shù)是新文件名字。注意,原名字和新名字都不包括后綴。
想想目前是否可以解決問(wèn)題
這時(shí)候只需要想一下,是否可以利用目前的自定義函數(shù)即可解決問(wèn)題。
先調(diào)用 get_file_names 獲得一系列的文件名。把文件名逐一傳給 get_new_name ,即可得到修改后的文件名。最后把原名字和新名字傳入 rename ,即完成需求。看起來(lái)沒(méi)問(wèn)題了。現(xiàn)在就可以回頭實(shí)現(xiàn)剛剛定義的函數(shù)了。
實(shí)現(xiàn)
另外小編整理了一套Python的學(xué)習(xí)資料需要的按以下步驟可獲得!
1、評(píng)論
2、轉(zhuǎn)發(fā)
3、關(guān)注
4、后臺(tái)私信【python】即可獲取!
在每個(gè)函數(shù)中編寫(xiě)代碼時(shí),因?yàn)閱?wèn)題足夠小,能讓我們可以保持注意力,不會(huì)被其他問(wèn)題所影響。行13,通過(guò) pathlib.Path 的方法 glob ,即可得到目錄下所有的視頻文件,這里只取出 mp4 文件。行14,因?yàn)樵诙x這個(gè)函數(shù)時(shí)就已經(jīng)明確返回的內(nèi)容不包括后綴名,這里是只取文件的名字。通過(guò) stem 屬性實(shí)現(xiàn)。行17,簡(jiǎn)單通過(guò)分列把名字分割成劇名與數(shù)字2個(gè)部分。行18,按規(guī)則并接成結(jié)果即可。行21-行23,這里生成修改名字需要的原始文件的全路徑和新文件的全路徑。更多的好處
現(xiàn)在,我們不僅順利把小問(wèn)題解決了,還可以單獨(dú)對(duì)這些小函數(shù)進(jìn)行測(cè)試。如下圖:
最后一個(gè)紅框部分,我們發(fā)現(xiàn)特殊情況下會(huì)導(dǎo)致 get_new_name 函數(shù)出現(xiàn)報(bào)錯(cuò)。我們已經(jīng)把各個(gè)小問(wèn)題獨(dú)立開(kāi)來(lái),因此解決問(wèn)題就變得很容易。這個(gè)報(bào)錯(cuò)顯然是因?yàn)槊种卸嗔艘粋€(gè)橫杠,那么我們只需要改善 get_new_name 即可。串聯(lián)起來(lái)即可解決問(wèn)題
這里我們只需要簡(jiǎn)單組合之前實(shí)現(xiàn)的幾個(gè)函數(shù)即可。改進(jìn)
當(dāng)前雖然已經(jīng)可以實(shí)現(xiàn)出功能,但畢竟是修改文件名字也是一個(gè)重要操作,因此希望加入以下改進(jìn):
程序執(zhí)行時(shí),先列出操作的詳細(xì)信息(文件變化前后的名字等)需要用戶輸入Y后,才真正執(zhí)行修改動(dòng)作。由于我們之前已經(jīng)把每個(gè)核心環(huán)節(jié)拆分成獨(dú)立的函數(shù),因此面對(duì)這種變動(dòng)就變得很容易。如下:
定義一個(gè)函數(shù) display_message ,負(fù)責(zé)顯示信息。參數(shù) modify_msgs 是一個(gè)列表,其中的元素是元組(原始文件,新文件)。下圖是主流程實(shí)現(xiàn):
行63-行66,得到一個(gè)原始文件對(duì)應(yīng)新文件的信息列表。行68,則是顯示信息。行69-行72,則是讓用戶確認(rèn)執(zhí)行。小結(jié)
把問(wèn)題拆解成小問(wèn)題。定義小函數(shù)逐個(gè)擊破每個(gè)小問(wèn)題。最后按照流程組合每個(gè)小函數(shù),即可解決問(wèn)題。如果覺(jué)得本文對(duì)你有所幫助,記得關(guān)注、評(píng)論、轉(zhuǎn)發(fā)、收藏噢~
總結(jié)
以上是生活随笔為你收集整理的python获取文件名不含后缀名_大部分Python资料都没有说到的重点-用实战教你解决问题的思路...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java虚引用作用_深入理解Java中的
- 下一篇: db2数据库日期减一天_DB2 数据库中