網站首頁 編程語言 正文
1. 引言
文件和目錄相關操作是軟件工程師必備的基本技能。
我不是說將一個文件復制到Windows文件資源管理器上的另一個文件夾中。
我是說使用代碼來進行自動化批量處理操作。
今天,我們將深入探討一個具體問題:
如何根據需要列出特定目錄下的所有文件名?
我將介紹5種用Python實現的方法。不同的方法適用于不同的使用場景。
2. 使用os.listdir()
使用Python中的os模塊下的方法listdir()是一個不錯的選擇,樣例如下:
>>> import os
>>> os.listdir()
上面的代碼將打印當前路徑下所有文件和目錄的名稱。
如果我們想基于特定路徑來打印結果,只需傳遞給函數os.listdir() 相應的參數,舉例如下:
>>> os.listdir(myPath)
如果我們只想打印所有文件不包含目錄,那么我們可以使用os.path.isfile() 來進行相應的過濾,如下:
>>> import os
>>> files = [f for f in os.listdir() if os.path.isfile(f)]
當然,對于目錄,同樣可以使用函數os.path.isdir() 進行過濾,代碼如下:
import os
files = [f for f in os.listdir() if os.path.isdir(f)]
如果我們只需要特定類型的文件怎么辦?
完全不用擔心。Python為復雜場景提供了更多選擇。
3. 使用os.walk()
os模塊中還有另一個方法 os.walk() 。顧名思義,它可以一層一層地“遍歷”目錄樹。當我們調用os.walk() 函數時,它將返回一個生成器。此時每次調用next() 方法生成下一個值時,它都會進入到一個layer ,結果是一個包含3個項的元組:(dirpath、dirname、filename) 。
舉例,如果要獲取第二層中所有文件夾的名稱,代碼如下所示:
from os import walk
f = []
layer = 1
w = walk("/Users/zhao")
for (dirpath, dirnames, filenames) in w:
? ? if layer == 2:
? ? ? ? f.extend(dirnames)
? ? ? ? break
? ? layer += 1
4. 在Glob模塊中使用正則表達式
有時我們不想獲取所有文件的名稱,而是希望精確獲取特定類型文件的名稱。
由于glob模塊能夠添加用于搜索的正則表達式,因此它將是我們進行此類操作的首選。
>>> import glob
>>> glob.glob("/sys/*.log")
上面的代碼將列出以log 結尾的文件名。
5. 使用pathlib
從Python 3.4開始,有一個名為pathlib 的模塊也很有用。
借助列表生成式的技巧,我們只需使用一行代碼即可生成當前路徑的所有文件名:
import pathlib
files = [f for f in pathlib.Path().iterdir() if f.is_file()]
令人奇怪的是,Path() 還附帶了glob() 函數。(無需在Python文件頂部顯式導入glob模塊)
import pathlib
files = [f for f in pathlib.Path().glob("/sys/*.log")]
6. 使用os.scandir()
經典的os.listdir() 函數很直觀,但對于包含大量文件的大型目錄來說效率并不高。因此,Python 3.5引入了一個新的功能類似的函數os.scandir() 。
是的,有的同學可能已經猜到了。此函數將返回一個生成器,并不是所有名稱的列表。在某些情況下,我們并不需要同時獲取所有名稱,此時會更有效。
>>> a=os.scandir()
>>> next(a)
<DirEntry 'test1.py'>
>>> next(a)
<DirEntry 'test2.py'>
7. 總結
本文重點介紹了在Python中如何列出目錄中的文件的五種方法,并針對每種方法給出了相應的代碼樣例。
原文鏈接:https://blog.csdn.net/sgzqc/article/details/128262281
- 上一篇:沒有了
- 下一篇:沒有了
相關推薦
- 2022-06-14 Python?torch.fft.rfft()函數用法示例代碼_python
- 2022-09-22 Redis配置文件redis.conf詳解
- 2022-04-11 【Android】覺得不好看?自定義CheckBox樣式
- 2022-11-04 SQL?Server還原完整備份和差異備份的操作過程_MsSql
- 2022-04-05 debian:根據文件名稱,找到對應的包
- 2022-12-16 Python中選擇結構實例講解_python
- 2022-11-16 docker-compose安裝及執行命令_docker
- 2022-10-23 C/C++指針介紹與使用詳解_C 語言
- 欄目分類
-
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支