python獲取文件名不含后綴名_大部分Python資料都沒有說到的重點-用實戰教你解決問題的思路...

前言

最近有些剛入門Python的小伙伴問我,他已經學會了大部分語法,基本的列表,元組也會使用,但是在實際中需要做一點小需求的時候,仍然不知所措。

解決問題重要的并非是如何寫代碼,而是如何分析和拆解問題,因此編程的思路變得非常重要。

本文以一個小需求為例子,講解從分析思路,到編寫代碼,整個流程的細節,希望能讓你得到更快速的水平提升。

本文重點

分析問題的思路。實現細節的關鍵點。需求變動時的應對。

affd8988813ef13e53074779f475da3d.png

需求

我們從這樣的一個小需求開始:某個文件夾中存在一系列電視劇的視頻文件,目的是把這些文件名字按規則轉成其他的形式。

如下圖,左邊為原始文件名,右邊是修改后的文件名:

ab6b16cdfcbab088a02ab8a859f33859.gif

別沖動,分析一下問題,能更高效解決問題

初學者很容易犯的一個錯誤是,遇到一個需求,沒有進行分析直接就寫代碼。嘗試一鼓作氣地完成。但往往會出現以下問題:

無法連貫編寫代碼,編寫過程總是會遇到小問題。寫出來一大片代碼,完全沒有重點,自己看過去似乎也看不太懂。就像一篇沒有分段,大雜燴的文章一樣。一旦需要修改某些地方,就會出現莫名其妙的錯誤,也很難查出問題原因。別怕,下面我們就一起來看看如何分析問題。

拆解

想想需求的描述,首先需要一個"從文件夾中找出視頻文件名字"這樣的功能。

函數名字 get_file_names ,其中函數名字體現了函數返回的是文件名字的序列。我們需要告訴他是從哪個文件夾中尋找文件,因此有一個參數 folder 。注意,這個函數返回的文件名是不包含后綴名。不要急著去實現他,先寫個 pass ,后續再回頭來實現即可。

下一個功能是"把一個文件名字轉成其他形式的新名字"。

函數名字 get_new_name 。需要傳入一個文件名字讓函數處理。返回的就是結果的文件名。注意,這個函數只是負責處理單個的文件名字。最后,需要一個負責修改文件名的函數即可。如下:

e1874914dead207814274cc84b9a1ee7.png

folder 參數是文件所在目錄路徑。org_name 參數是原文件名字。new_name 參數是新文件名字。注意,原名字和新名字都不包括后綴。

a11a2ffd53a608058ba9694ca53ca079.png

想想目前是否可以解決問題

這時候只需要想一下,是否可以利用目前的自定義函數即可解決問題。

先調用 get_file_names 獲得一系列的文件名。把文件名逐一傳給 get_new_name ,即可得到修改后的文件名。最后把原名字和新名字傳入 rename ,即完成需求。看起來沒問題了。現在就可以回頭實現剛剛定義的函數了。

實現

另外小編整理了一套Python的學習資料需要的按以下步驟可獲得!

1、評論

2、轉發

3、關注

4、后臺私信【python】即可獲取!

2e2a7116a68df139bba49f52fbb11ba4.png

在每個函數中編寫代碼時,因為問題足夠小,能讓我們可以保持注意力,不會被其他問題所影響。行13,通過 pathlib.Path 的方法 glob ,即可得到目錄下所有的視頻文件,這里只取出 mp4 文件。行14,因為在定義這個函數時就已經明確返回的內容不包括后綴名,這里是只取文件的名字。通過 stem 屬性實現。行17,簡單通過分列把名字分割成劇名與數字2個部分。行18,按規則并接成結果即可。行21-行23,這里生成修改名字需要的原始文件的全路徑和新文件的全路徑。更多的好處

現在,我們不僅順利把小問題解決了,還可以單獨對這些小函數進行測試。如下圖:

f64c8aacf80228a35942b54dd37cec9a.png

最后一個紅框部分,我們發現特殊情況下會導致 get_new_name 函數出現報錯。我們已經把各個小問題獨立開來,因此解決問題就變得很容易。這個報錯顯然是因為名字中多了一個橫杠,那么我們只需要改善 get_new_name 即可。串聯起來即可解決問題

2d8bdd54a51ee432af9de9296eccb0b4.png

這里我們只需要簡單組合之前實現的幾個函數即可。改進

當前雖然已經可以實現出功能,但畢竟是修改文件名字也是一個重要操作,因此希望加入以下改進:

程序執行時,先列出操作的詳細信息(文件變化前后的名字等)需要用戶輸入Y后,才真正執行修改動作。由于我們之前已經把每個核心環節拆分成獨立的函數,因此面對這種變動就變得很容易。如下:

1d6ce0f3f4f446882b79fad6224c37c6.png

定義一個函數 display_message ,負責顯示信息。參數 modify_msgs 是一個列表,其中的元素是元組(原始文件,新文件)。下圖是主流程實現:

dc4ee2ad1fc4ddf1f660bee438e27076.png

行63-行66,得到一個原始文件對應新文件的信息列表。行68,則是顯示信息。行69-行72,則是讓用戶確認執行。小結

把問題拆解成小問題。定義小函數逐個擊破每個小問題。最后按照流程組合每個小函數,即可解決問題。如果覺得本文對你有所幫助,記得關注、評論、轉發、收藏噢~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/538773.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/538773.shtml
英文地址,請注明出處:http://en.pswp.cn/news/538773.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

12.JAVA基本數據類型

Java是一種強類型語言,每個變量都必須聲明類型。 String 不是java的基本數據類型!!! 除了8種基本數據類型之外,其他的都是引用類型。 引用類型的初始值是null byte,short,int類型的默認值為0 …

python成語接龍代碼_實現成語接龍(Python)

目錄 前言 要實現的規則如下:根據接龍的成語的第一個字與前一個成語結尾的字的比較,分一下三種模式模式1:字相同拼音也要相同 模式2:字相同拼音不要求相同 模式3:字不要相同拼音要求相同,即諧音就可以接龍的…

opencv android jni,OpenCV - AndroidStudio的JNI工程及引用OpenCV

一把利刃,用不好,會傷到你遍體鱗傷。用得好,便為你披荊斬棘,所向披靡。好與不好之間,便是歷練。幾經波折,終于跌跌撞撞,集成了OpenCV,并實現了灰度圖片,自此一扇新的大門已經打開。至此我手中已…

python語句int_python中的int函數

int函數用來把其他類型向下轉換為整數類型 int(3.6) --- 3 int(3.2) --- 3 int(1/3) --- 0 int("1") --- 1 int()可以按照指定的進制的整數轉換為十進制的整數,如果不指定默認是十進制轉換為十進制,第二個參數給0和不給一樣,除非你…

13.JAVA基礎:八進制,十六進制表示

原文路徑:http://simon-c.iteye.com/blog/802149 點擊查看原文 ----------------------------------------------------------- 可以使用八進制、十六進制的類型:long, int, short, byte 八進制表示:以0作為前綴,數碼有0,1,…

excel圖表交互聯動_深入講解EasyShu圖表與引用數據動態聯動功能

EasyShu一開始的架構是將制作好的圖表最終返回給用戶,不依賴用戶工作表的單元格區域引用,可滿足圖表繪制后的脫離數據源分享傳播,無奈用戶最強烈的反饋是要求圖表與數據保持聯動,這一需求實在對EasyShu是一個巨大的挑戰。為了將Ea…

使用pipenv代替virtualenv管理python包

前言 第一次接觸到 pipenv 是因為看到董明偉大神的《使用pipenv管理你的項目》,之前可能和大家的選擇類似使用 virtualenv 或者 pyenv 來管理 python 的包環境。virtualenv 是針對python的包的多版本管理,通過將python包安裝到一個模塊來作為python的包虛…

android代碼生成excel,AndroidExcel

Android_Excel在android中生成excel##效果圖##初始化數據首先我們要先造下測試數據,這里我把數據寫死在一個常量類Const中,如下:public class Const {public interface OrderInfo{public static final String[][] orderOne new String[][] {…

14.JAVA整型變量

表示形式 Java語言整型常數的3種表示形式: 1、十進制整數:99,-100,0 2、八進制整數:要以0開頭,如015 3、十六進制整數:以0x開頭,如0x15 點擊查看十進制八進制十六進制概念 public static v…

exists sql用法_干貨!SQL性能優化,書寫高質量SQL語句

寫SQL語句的時候我們往往關注的是SQL的執行結果,但是是否真的關注了SQL的執行效率,是否注意了SQL的寫法規范?以下的干貨分享是在實際開發過程中總結的,希望對大家有所幫助!1. limit分頁優化當偏移量特別大時&#xff0…

python docker自動化_「docker實戰篇」python的docker爬蟲技術-移動自動化控制工具appium工具(17)...

原創文章,歡迎轉載。轉載請注明:轉載自IT人故事會,謝謝!原文鏈接地址:「docker實戰篇」python的docker爬蟲技術-移動自動化控制工具appium工具(17)Appium是一個開源測試自動化框架,可用于原生,混…

一些adb的常用命令

顯示正在運行的服務 adb shell dumpsys activity services [packageName] 打開一個Activity adb shell am start -n {包(package)名}/Activity絕對路徑(ex:com.xxx.xxx.xxxActivity) 以調試模式啟動一個Activity adb shell am start -D -n {包…

android 調用restful,android調用springmvc寫的restful

下載srpingmvc的相關jarhttp://www.cnblogs.com/liuhongfeng/p/4919963.html配置spingmvc和相關接口http://blog.csdn.net/jianyuerensheng/article/details/51258942如果報錯,檢查JDK版本是否和本地的一致在UserController.jave中添加接口package com.zjn.controll…

eureka server配置_springcloud項目搭建第三節:eureka集群

在上一節搭建的項目基礎上,在創建一個eureka-server-two的子項目和eureka-server項目一樣,然后修改各自項目的application.yml文件eureka-server項目的application.yml文件修改2點1.修改eureka的注冊地址改成另一個eureka-server-two項目的注冊中心地址2…

15.浮點類型

數值范圍 float類型又被稱為單精度類型,尾數可以精確到7位有效數字,在很多情況下,float類型的精度很難滿足需求。 double類型又被稱為雙精度類型,尾數可以精確到14位有效數字。 浮點類型默認是double。 public static void main(…

c4d流體插件_(圖文+視頻)C4D野教程:TFD、XP和RF三大流體插件協作案例

在逛INS的時候,看見國外一位叫做BastardFilms的大神制作了很多流體的效果:尤其是他制作的很多液態煙霧的流體,我特別喜歡,由于我不知道怎么下載INS的視頻,所以這里只有發個截圖大家看看:作者這里有說明是用…

form表單用js提前執行函數若不成功則不提交_面試必會的重復提交 8 種解決方案!...

重復提交看似是一個小兒科的問題,但卻存在好幾種變種用法。在面試中回答的好,說不定會有意想不到的收獲!現把這 8 種解決方案分享給大家!1.什么是冪等在我們編程中常見冪等select查詢天然冪等delete刪除也是冪等,刪除同一個多次效…

16.char類型

char,占2個字節。 單引號用來表示字符常量。例如a. char類型用來表示在Unicode編碼表中的字符。 unicode編碼被設計用來處理各種語言的所有文字,它占了2個字節,可允許有65536個字符。 Java語言中還允許使用轉義字符‘\,來將其后的…

轉向Kotlin——數據類和封閉類

數據類和封閉類是Kotlin中的兩種特殊的類,今天一起了解一下。更多精彩內容也可以關注我的微信公眾號——Android機動車 數據類 數據類是Kotlin的一個語法糖。Kotlin編譯器會自動為數據類生成一些成員函數,以提高開發效率。 數據類的使用 無論是Java服務器…

idea前端可視化_jsp可視化開發工具_netbeans jsp可視化_idea 可視化開發 jsp

數字生態鉅惠來襲!秒殺 2核4G 5M帶寬 1200元/3年,1核1G首購 99元/年把默認改成 myeclipse jsp editor()原默認的jsp編輯器是 myeclipse visual jspdesigner,顧名思義,此編譯器是jsp可視化編輯器,對于初學者有很多的幫助…