攝影:產品經理
廚師:產品經理
當咱們要在一個文件夾及其子文件夾裏面尋找特定類型的文件,咱們可能會這樣寫代碼:app
import os all_file = os.listdir('target_folder') target_file = [x for x in all_file if x.endswith('.py')]
import os
py_files = []
for root, folder, files in os.walk('.'):
for file in files:
if file.endswith('.py'):
py_files.append(os.path.join(root, file))ide
print(py_files)code
若是當前文件夾的結構以下所示:
.
├── 1.py
├── 2.py
├── sub
│ ├── 3.py
│ ├── subsub1
│ │ └── 4.py
│ └── subsub2
│ └── 5.py
└── test.pyblog
那麼運行結果以下圖所示: ![](https://s4.51cto.com/images/blog/202012/03/b9dc03f23f5e4db495b9995347f4182d.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) 雖然確實知足要求了,可是代碼仍是有點複雜,而是嵌套三層縮進,代碼不夠美觀。 實際上,要解決遍歷文件的問題,只須要使用 Python 自帶的 glob模塊便可:
import glob遞歸
result = glob.glob('*/.py', recursive=True)
print(result)get
在使用 glob模塊時,第一個參數指定目標文件的文件名格式,這裏能夠使用 Linux 中的通配符。若是文件名寫爲 *.py,那麼就是當前文件夾下面的全部 .py文件。 若是文件名寫爲 **/*.py,那麼就是當前第一層子文件夾下面的全部 .py文件。 若是文件名寫爲 **/*.py,而且增長參數 recursive=True,那麼就是遞歸搜索當前文件夾和全部子文件夾。 運行效果以下圖所示: ![](https://s4.51cto.com/images/blog/202012/03/677b9b0443e4c9167fc0899c99517a18.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) 很是簡單就實現了遍歷文件夾查找文件的操做。