批量處理檔名稱(下)

2021-10-10 13:57:33 字數 4827 閱讀 1133

歡迎來到今天的課堂,和我一起繼續完成辦公自動化的案例學習,幫你早日掌握用python快速便捷解決工作難題的技能,給下班按下加速鍵~

上節課程中我們用5行**實現了提取資料夾下所有文件名稱的任務(如果忘記也沒關係,稍後我會帶你一起複習一下)

但實際應用場景中,要求可能不會這麼簡單。假如領導需要讓你在雜亂的文件中提取所有pdf格式的參考文獻,或png格式的,資料夾中的文件數量多達幾百上千,還要把結果存到**中,怎麼從數量龐大的文件中準確挑選需要的內容呢?

我們馬上就來實現這個功能,有了上節課的鋪墊,只需要在原本的**上稍加修改,就能解決問題。開始行動!

想要實現今天自動判斷檔案型別,結果寫入**檔案的新功能,其實只需要在上節課的基礎上增加幾行簡單的**,噹噹當~請看:

import os

import pandas

path=

''d:

/課程/python/資料夾

name=os.listdir(path)

result=

for i in name:

if i.endswith(

'.pdf'):

result_table=pandas.dataframe(result)

result_table.to_csv(

'pdfname.csv'

,encoding=

'utf-8-sig'

)

與上次一樣此處的路徑仍需根據自己的需求更改

path=

'自己所需的路徑'

你是不是已經迫不及待想要了解其中的方法和原理了?和之前一樣,先來梳理本節知識的整體思路:

建立新的列表型別變數,為存放結果作準備
書寫條件,判斷文件是否符合條件,符合則加入步驟二內建立的容器內
將第三步得到的文件名稱儲存到scv**檔案
其實,我們只需要把上節課獲取到的文件名稱進行挑選甄別,找到指定格式文件,儲存起來,就能達到檔案篩選的目的。

這就需要在寫入**檔案之前先插入一段判斷文件格式的**。

#匯入所需要的庫,os 模組提供了非常豐富的方法用來處理檔案和目錄

import os

import pandas

#指定資料夾的路徑

path=

'd:/課程/python/資料夾'

#讀取資料夾下的文件名稱

name=os.listdir(path)

#插入**,實現檔案篩選功能

現在所有文件名存放在name變數中,要從中挑選出pdf格式檔案,就好比在乙個盛滿了各種口味水果糖的碗裡把水蜜桃口味挑選出來。

當然需要乙個新的容器來盛放我們精心挑選的水蜜桃糖果了。下面就來為你介紹python中的乙個容器——列表

- 列表

我們可以往列表這個容器中裝各種型別的資料,比如數字,字元等等。
列表需要用中括號[ ]把裡面的各種資料框起來,資料之間用英文逗號隔開,例如乙個列表中存放三個檔名[『a.pdf』,『b.pdf』,『c.pdf』]

上節課中,我們使用os模組中的listdir()方法,得到了全部文件名稱,這些名稱都存放在變數name中,其實name就是乙個列表。

我在最後加入一行print()語句,列印出列表name,看一下效果:

**練習如下:

#匯入所需要的庫,os 模組提供了非常豐富的方法用來處理檔案和目錄

import os

#指定資料夾的路徑

path=

'd:/課程/python/資料夾'

#讀取資料夾下的文件名稱

name=os.listdir(path)

#列印列表

print

(name)

下面我們需要建立乙個新的容器,把從大容器name中挑選出的pdf格式檔案裝入其中。方法非常簡單:

result=

這樣我們成功建立了乙個空列表,起名為result,用於盛放稍後挑選出的pdf檔案。

終於來到了激動人心的篩選環節。這裡我們的實現思路也非常簡單易懂。

每個檔案都有它的字尾名,是計算機用來標記檔案型別的一種機制。常見的副檔名有.doc代表word檔案;.***代表音訊檔案;.jpg代表等等。

pdf檔案的副檔名是.pdf。因此想要判斷乙個檔案是否為pdf格式,只需要判斷它的副檔名是否為.pdf,也就是文件名稱是不是以.pdf結尾就可以啦。

接下來我們對路徑下的每乙個文件名稱進行判斷。

注意,我剛才說的是對每乙個文件進行判斷,也就是需要反覆進行乙個操作,看到這裡機智的你應該能聯想到,上節課講過的迴圈語句即將派上用場了。

回憶一下它的結構

for 元素 in 序列:

執行的操作

endswith()方法,可以確定某字元結尾是否為括號中的指定內容。在這個案例中,我們需要選擇pdf格式檔案,就可以用endswith(』.pdf』)來判斷。

如果答案為『是』,就把這個檔名新增到剛才建立的result列表中。

for i in name:

if i.endswith(

'.pdf'

):

從上面的**中可以看到,在python中,我們需要使用if條件語句來完成判斷工作。

類似「如果…就…」的邏輯,就是與計算機溝通的邏輯:條件判斷,它的作用是明確地讓計算機知道:在什麼條件下,該去做什麼。
使用方法是

if 條件:

做什麼舉乙個簡單的例子:如果我沒吃飽,就再吃乙個漢堡。可以寫成:

if 我沒吃飽:

再吃乙個漢堡

經過上面一番操作,pdf格式的文件名稱就全部存放在了result列表中,現在一起回顧一下**:

#匯入所需要的庫,os 模組提供了非常豐富的方法用來處理檔案和目錄

import os

#指定資料夾的路徑

path=

'd:/課程/python/資料夾'

#讀取資料夾下的文件名稱

name=os.listdir(path)

#建立乙個空列表

result=

#迴圈判斷文件是否為pdf格式,並把pdf文件名存放進新列表中

for i in name:

if i.endswith(

'.pdf'

):

到這裡,就成功提取到了所有pdf文件,撒花慶祝~

獲取到所有文件的名字,最後一步就是把它們存入**中啦。

再次從模組中來尋找捷徑,這回我要為你介紹乙個功能強大的模組:pandas。

pandas是乙個類似excel的資料分析模組,提供了大量能使我們快速便捷地處理資料的函式和方法。

照例先來匯入它:

import pandas
文件名稱目前存放在result列表中,首先需要把它轉換為資料框的形式,方便儲存進**,利用dataframe這個方法來完成,括號中的引數為剛才得到的文件名稱資料,將轉換後的結果存入result_table變數中:

#將文件名稱轉換為資料框格式

result_table=pandas.dataframe(result)

最後將資料框形式的文件寫進**檔案。需要借助pandas模組中的乙個to_csv方法:

#將獲取的文件名稱儲存進**檔案

result_table.to_csv(

'pdfname.csv'

,encoding=

'utf-8-sig'

)

方法中的第乙個引數是生成的csv**名稱,可以自由指定;第二個引數表示編碼格式,utf-8-sig編碼可以避免名稱有中文時存在亂碼。

執行完上面的全部**後,來看看結果吧~

在目錄下新生成了乙個pdfname.csv檔案,開啟它就能看到自動為我們統計的文件名稱。

在實際應用中,你需要提取的文件格式可能是各式各樣的。這段**雖然非常簡單,但復用性卻很高。

以後遇到類似的工作再也不需要手動複製貼上了,修改**中的路徑和檔案字尾就能一秒搞定。

替換endswith()裡的引數就能衍生出更多功能。

#篩選excel文件

endswith(

'.xls'

)#篩選word文件

endswith(

'.doc'

)#篩選mp4檔案

endswith(

'.mp4'

)

都可以根據你的需求來自己書寫和更改。

今天我們在上節課的基礎上完成了批量挑選pdf格式檔案,提取文件名生成**檔案的任務,整體思路如下:

匯入模組

得到資料夾路徑

獲取文件名稱

建立容器存放結果

尋找pdf文件

儲存到**檔案

另外了解了兩個新的語法知識:

1、列表

列表是乙個容器,乙個列表需要用中括號[ ]把裡面的各種資料框起來,資料之間用逗號隔開。

2、條件語句

類似「如果…就…」的邏輯,就是與計算機溝通的邏輯:條件判斷,它能明確地讓計算機知道:在什麼條件下,該去做什麼。用法如下:

if 條件:

去做什麼

乙個熱愛python的學習崽

批量修改檔名稱

批量修改檔名稱時可以利用批處理bat來寫,公式為 ren空格原檔名稱空格新檔名稱 以下講解將含有相同內容的檔名稱改為只含有不同內容的名稱。為了構成這個公式,首先要提取原檔名稱,可以寫bat檔案dir b mp4 b.txt 即可讀出以.mp4位字尾的檔名稱,字尾可修改,儲存位置為b.txt,儲存格式...

批量修改檔名稱

方法 步驟 2 滑鼠左鍵點選,開始 執行 在對話方塊中輸入字母 cmd 進入dos模式 如下圖所示。在dos模式輸入命令列 cd c pic 然後回車,再輸入命令列 dir b rename.xls 如下圖所示,可將資料夾中的檔名在rename.xls檔案中列出。小貼士 有的時候,你的計算機正處於中...

python批量修改檔名稱

需求 將bak目錄下的所有test jpg檔案改為test jpg 例如 test 1 jpg檔案修改為test1.jpg usr bin python coding utf 8 import os import re movie name os.listdir bak for temp in mo...