Python實現(xiàn)批量獲取當(dāng)前文件夾下的文件名
最近,在和網(wǎng)友交流時,對方推薦了一個視頻,我打開一看,是一個手工獲取當(dāng)前目錄下所有文件名的手機(jī)視頻。用的方法是在win11中復(fù)制所有文件的路徑,然后粘貼到Excel當(dāng)中,通過查找替換和分列的方法,清除冗余部分,最后得到文件名。
這種方法很巧妙,沒有借助于編程或者不太常見的軟件就獲取了文件名。我隨后也探索了一些簡便的方法和大家一起來分享。
先說一下要求:獲取當(dāng)前文件夾下的所有png文件,不包括擴(kuò)展名。
一、復(fù)制路徑法——簡單方便
使用快捷鍵ctrl+a來全先當(dāng)前文件,然后選擇資源管理器上方的【復(fù)制路徑】,得到所有文件的路徑。
獲取文件路徑
接著,把這些路徑放到Excel文件當(dāng)中,通過【查找替換】獲取所有文件名,這是可以把不是png的文件刪除,然后再把A列按照【.】分列,這樣就得到了所有圖片的文件名。
查找替換
這種方法簡單、實用,沒有什么技術(shù)含量,小白也能輕松上手。如果當(dāng)前目錄下多種類型文件混雜,那么還要一行一行刪除不符合要求的路徑。解決的辦法是把文件按照類型排列,然后再選中獲取路徑。
二、Dos命令法
Dos命令是windows不斷更新卻從未放棄的內(nèi)置功能,想當(dāng)前我學(xué)計算機(jī)可是從dos開始學(xué)起,它的命令有時非常強(qiáng)大,比在windows下操作簡單多了。
為了獲取當(dāng)前目錄下的文件名,我們可以在當(dāng)前目錄上方輸入【cmd】,進(jìn)入dos界面。
在當(dāng)前目錄下進(jìn)入dos
然后,輸入命令:
dir *.png /b > filename.csv
把文件名寫入csv文件
這樣,我們就把擴(kuò)展名為png的所有文件的文件名寫入到了filename.csv文件當(dāng)中。我們可以用Excel打開這個csv文件,再進(jìn)行分列就可以了。
dos命令寫入當(dāng)前目錄下的文件名
這種方法明顯減少了操作步驟,不僅對文件名進(jìn)行了篩選,也不用再復(fù)制和粘貼了,幾乎是一步到位把文件名寫入到了Excel文件當(dāng)中。當(dāng)然,這種方法雖然簡便,但是無法提取子目錄中的文件名。
三、批處理命令法
批處理命令比一般的dos命令更強(qiáng)大,因為它可以便歷子目錄,甚至還可以批量創(chuàng)建文件,比如上面的寫入文件名到csv文件中的dos命令還可以改寫為以下批處理命令:
for %F in (*.png) do @echo %F>>file.csv
以上命令的功能是列出當(dāng)前目錄下所有 .png 文件的文件名(擴(kuò)展名),并將結(jié)果追加到 filename.csv文件中。
如果不想帶擴(kuò)展名,也可以用以下代碼一鍵實現(xiàn):
for %F in (*.png) do @echo %~nF>>file.csv
在上面的二條命令中, for 循環(huán)來遍歷當(dāng)前目錄下所有的 .png 文件。
for %F in (*.png):這是 for 命令的語法,它會遍歷當(dāng)前目錄下所有文件名匹配 *.png 的文件。 %F 是循環(huán)變量,它代表當(dāng)前正在處理的文件名。
do @echo %~nF>>file.txt:do 關(guān)鍵字指示在每次迭代時要執(zhí)行的命令。@echo %~nF 用于打印當(dāng)前文件名的文件名部分(不帶擴(kuò)展名)。
%~nF 是獲取 %F 的文件名部分的語法。
>>file.txt 表示將輸出追加到 file.txt 文件末尾,而不是覆蓋原有內(nèi)容。
四、Python命令法
如果電腦上安裝的有python,還可以使用Python編程的方法,導(dǎo)入os或者pathlib模塊,通過遍歷列表中的每一個元素,把它們追加到Excel表中,然后再保存即可輕松實現(xiàn)指定文件名。
#導(dǎo)入模塊 import os from openpyxl import Workbook # 創(chuàng)建一個工作簿對象 wb = Workbook() # 激活第一個工作表 ws = wb.active # 你的列表數(shù)據(jù) data = [file for file in os.listdir() if file.endswith(".png")] # 如果不要擴(kuò)展名,則可以這樣寫: # data = [os.path.splitext(file)[0],for file in os.listdir() if file.endswith(".png")] # 將數(shù)據(jù)逐行寫入工作表 for row in data: ws.append([row]) # 保存工作簿 wb.save('output.xlsx')
五、VBA 方法
如果經(jīng)常需要獲取當(dāng)前目錄下的所有文件名,就可以用下面的VBA代碼:
Sub GetFileNames() Dim FileSystem As Object Dim Folder As Object Dim File As Object Dim i As Integer ' 清空Sheet1中的數(shù)據(jù) Sheets("Sheet1").Cells.Clear ' 創(chuàng)建FileSystem對象 Set FileSystem = CreateObject("Scripting.FileSystemObject") ' 獲取當(dāng)前目錄路徑 Set Folder = FileSystem.GetFolder(ThisWorkbook.Path) ' 在Sheet1中顯示文件名 i = 1 For Each File In Folder.Files Sheets("Sheet1").Cells(i, 1).Value = File.Name i = i + 1 Next File End Sub
我們可以將上面的代碼復(fù)制并粘貼到 Excel 的 VBA 編輯器中(按下 Alt + F11 打開),然后在工程資源管理器中的 Microsoft Excel Objects 中找到 ThisWorkbook,雙擊打開,將代碼粘貼到打開的代碼窗口中。然后關(guān)閉 VBA 編輯器,保存文件。
每當(dāng)你運(yùn)行 GetFileNames這個宏時,它將在 Sheet1 中列出當(dāng)前目錄下的所有文件名。如下圖所示:
這種方法是一步到位,輕松獲取了所有的文件名。不過要注意,VBA運(yùn)行時會清空Sheet1中的數(shù)據(jù),所以保證當(dāng)前工作表是sheet1,然后沒有其它重要數(shù)據(jù)。
六、學(xué)后反思
同一功能我們可以采用多種方法來實現(xiàn),從手工復(fù)制粘貼到后來的dos命令或者編程,我都可以輕松實現(xiàn)達(dá)到最后的目標(biāo)。大家可以根據(jù)自己喜好來進(jìn)行取舍。第一種方法簡單好記,建議小白學(xué)習(xí)。第二種和第三種方法涉及dos命令,需要大家記憶一下。第三種和第四種分別保存在py和xls文件中,基本上是開箱即用。
到此這篇關(guān)于Python實現(xiàn)批量獲取當(dāng)前文件夾下的文件名的文章就介紹到這了,更多相關(guān)Python獲取文件名內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Pytorch?nn.Unfold()?與?nn.Fold()圖碼詳解(最新推薦)
這篇文章主要介紹了Pytorch?nn.Unfold()?與?nn.Fold()圖碼詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-05-05Python中sklearn實現(xiàn)交叉驗證示例分析
這篇文章主要介紹了Python中sklearn實現(xiàn)交叉驗證,本文python的版本為3.8,各個版本之間函數(shù)名字略有不同,但是原理都是一樣的,集成開發(fā)環(huán)境使用的是Anaconda的Spyder,需要的朋友可以參考下2023-08-08python實現(xiàn)按任意鍵繼續(xù)執(zhí)行程序
本文給大家分享的是如何使用Python腳本實現(xiàn)按任意鍵繼續(xù)執(zhí)行程序的代碼,非常的簡單實用,有需要的小伙伴可以參考下2016-12-12Pandas中的loc與iloc區(qū)別與用法小結(jié)
loc函數(shù):通過行索引 “Index” 中的具體值來取行數(shù)據(jù)(如取"Index"為"A"的行)而iloc函數(shù):通過行號來取行數(shù)據(jù)(如取第二行的數(shù)據(jù)),這篇文章介紹Pandas中的loc與iloc區(qū)別與用法,感興趣的朋友一起看看吧2024-01-01VTK與Python實現(xiàn)機(jī)械臂三維模型可視化詳解
這篇文章主要介紹了VTK與Python實現(xiàn)機(jī)械臂三維模型可視化詳解,具有一定借鑒價值,需要的朋友可以參考下。2017-12-12