Python3 - 獲取資料夾中的檔案列表
問題
獲取檔案系統中某個目錄下的所有檔案列表。
解決方案
使用 os.listdir()
函式來獲取某個目錄中的檔案列表,比如:
import os
file_name = os.listdir('/Users/xz/test')
print(file_name)
['Bath.txt', 'test.py', '2.txt', '1.txt', 'cook.txt']
結果會返回目錄中所有檔案列表,包括所有檔案,子目錄,符號連結等等。 如果需要通過某種方式過濾資料,可以考慮結合 os.path
庫中的一些函式來使用列表推導。比如:
import os.path
names = [name for name in os.listdir('/Users/xz/test')
if os.path.isfile(os.path.join('/Users/xz/test', name))]
print(names)
['Bath.txt', 'test.py', '2.txt', '1.txt', 'cook.txt']
字串的 startswith()
和 endswith()
方法對於過濾一個目錄的內容也是很有用的。比如:
pyname = [name for name in os.listdir('/Users/xz/test') if name.endswith('.py')]
print(pyname)
['test.py']
對於檔名的匹配,你可能會考慮使用 glob
或 fnmatch
模組。比如:
import glob
pyname = glob.glob('/Users/xz/test/*.py')
print(pyname)
['/Users/xz/test/test.py']
from fnmatch import fnmatch
pyname = [name for name in os.listdir('/Users/xz/test') if fnmatch(name, '*.py')]
print(pyname)
['test.py']
討論
通過上述的幾種方法,均可以獲取目錄中的檔案列表,但是其返回結果只是目錄中實體名列表而已。
如果想獲取檔案的其他後設資料,比如檔案大小,修改時間等等,需要使用到 os.path
模組中的函式,或os.stat()
函式來收集資料。比如:
# Get file sizes and modification dates
name_sz_dt = [(name, os.path.getsize(name), ar.get(os.path.getmtime(name)).format("YYYY-MM-DD HH:mm:ss"))
for name in pyfile]
for name, sizes, date in name_sz_dt:
print(name, sizes, date)
/Users/xz/test/test.py 214 2018-11-29 14:03:02
# Alternative: Get file metadata
file_metadata = [(name, os.stat(name)) for name in pyfile]
for name, meta in file_metadata:
print(name, meta.st_size, ar.get(meta.st_mtime).format("YYYY-MM-DD HH:mm:ss"))
/Users/xz/test/test.py 214 2018-11-29 14:03:02
需要注意的是,有時候在處理檔名編碼問題時,可能會出現一些問題。 通常,函式 os.listdir()
返回的實體列表是根據系統預設的檔名編碼進行解碼。 但有時候也會遇到一些不能正常解碼的檔名。
相關文章
- Unity 編輯器中獲取選中的資料夾、檔案路徑Unity
- 讀取資料夾檔案
- nodejs遞迴資料夾獲取所有檔案路徑NodeJS遞迴
- 遞迴獲取檔案列表遞迴
- linux檔案相關命令 透過檔案獲取父資料夾名稱Linux
- python中按照資料夾中檔案的排列順序讀取檔案內容Python
- ASP.NET Core 中的檔案提供程式 遍歷資料夾讀取檔案資訊ASP.NET
- 獲取一個資料夾下所有指定字尾名(.java)的檔案(包括子資料夾中的內容),並將這些檔案的絕對路徑寫入到一個文字檔案中Java
- 把多個資料夾中的檔案批量放到一個資料夾
- c/c++、matlab讀取資料夾下的檔案C++Matlab
- IDEA中的.iml檔案和.idea資料夾Idea
- NodeJs批量require資料夾中的所有檔案NodeJSUI
- win10怎麼快速獲取資料夾內檔名 win10怎麼讀取資料夾內檔名Win10
- SpringBoot專案中獲取配置檔案的配置資訊Spring Boot
- .gitignore 在已忽略資料夾中不忽略指定檔案、資料夾...Git
- 畸形檔案 資料夾
- win10資料夾中怎樣批量獲取所有檔名稱_win10批量提取資料夾內檔名的方法Win10
- win10資料夾中怎樣批次獲取所有檔名稱_win10批次提取資料夾內檔名的方法Win10
- Linux中隱藏檔案與資料夾Linux
- Python求取資料夾內的檔案數量、子資料夾內的檔案數量Python
- git的gitignore檔案排除資料夾和檔案Git
- C++讀取某個資料夾下面的子資料夾及其所有檔案C++
- Springboot 獲取jar包中的檔案Spring BootJAR
- windows cmd拉取linux資料夾下的檔案,並解壓WindowsLinux
- C# 將資料夾中檔案複製到另一個資料夾C#
- win10如何獲取檔案訪問許可權_win10怎麼獲取許可權看資料夾Win10訪問許可權
- c++ 獲取資料夾目錄名字C++
- 獲取AFP共享的資料夾及其許可權
- Java中的獲取檔案的物理絕對路徑,和讀取檔案Java
- [python] 資料夾所有檔案讀取,正則化,json使用PythonJSON
- Qt 選擇資料夾、建立資料夾以及建立檔案QT
- Centos8中如何更改資料夾中多個檔案的副檔名CentOS
- python 如何刪除資料夾下的所有檔案和子資料夾?Python
- 資料夾裡的檔案怎麼設定跟外資料夾同名
- Flutter 中的資料的獲取Flutter
- Java中獲取JAR檔案中資源路徑的三種方法JavaJAR
- 獲取拖拽和剪貼簿中的檔案
- SpringBoot 中獲取專案的路徑和檔案流Spring Boot