歡迎來到今天的課堂,和我一起繼續完成辦公自動化的案例學習,幫你早日掌握用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...