目錄
由於筆者做圖像處理較多,咱們就用讀取文件夾內的所有圖像文件爲例,解決批量讀取文件夾內文件的問題。我們用到的核心就是 os.path() 的庫。
os.path.exists(path) | 如果路徑 path 存在,返回 True;如果路徑 path 不存在,返回 False。 |
os.path.isfile(path) | 判斷路徑是否爲文件 |
os.path.isdir(path) | 判斷路徑是否爲目錄 |
os.path.join(path1[, path2[, ...]]) | 把目錄和文件名合成一個路徑 |
在os.path的用法中,常用的幾種用法如上表中所示,其他更多用法可以參考這個鏈接。
話不多說,直接用代碼更容易看。
從下面這個代碼中容易看到:
代碼1
from skimage import io
import os
path = 'F:/GF2/GF2_buildings/'
path2 = 'F:/GF2/'
flie_dir = os.listdir(path)
for file in flie_dir:
if not os.path.isdir(file):
flie_name = path + file
print(flie_name)
data = io.imread(flie_name)
io.imsave(path2 + file, data)
else:
print('can not!!!')
在代碼1中,經常因爲忘記寫路徑文件後面的反斜槓‘/’導致報錯,因爲在拼路徑時,直接使用“+”將目錄和文件名拼接起來,可能會出現由於少寫“/”導致路徑的最後一個文件夾名稱與該文件夾下的文件名拼成一個文件名。比如:
path = 'F:/GF2/GF2_buildings'
file = '001.tif'
new_file = path + file
print(new_file)
打印出來的new_file就是F:/GF2/GF2_buildings001.tif了,顯然這不是我們想要的結果,解決辦法就是:
方案1:在路徑的最後加一個反斜槓“/”,像代碼1裏的寫法一樣。
方案2:在拼路徑的時候,採用
new_file = path + '/' + file
解決。
但這樣寫的時候,總覺得代碼不是很智能。
噹噹噹當!!主角上場
os.path.join()函數可以一次解決這個問題,不管在路徑裏有沒有寫反斜槓,都可以拼接成正確的新路徑,如下代碼2所示。
代碼2
path = 'F:/GF2/GF2_buildings'
path2 = 'F:/GF2'
flie_dir = os.listdir(path)
for file in flie_dir:
if not os.path.isdir(file):
flie_name = os.path.join(path , file)
print(flie_name)
data = io.imread(flie_name)
io.imsave(os.path.join(path2 , file), data)
else:
print('can not!!!')
os.listdir()函數用來讀取該目錄下所有的文件名,並將其保存成列表;
os.path.isdir()函數是判斷該路徑是否是正確的路徑,也就是判斷路徑是否存在,返回值爲true 或 flase;
os.path.join()函數是用來拼接路徑。
os裏面還有更多用法,個人認爲這種小技巧用法雖然不能提升多少代碼水平,但是對於邏輯檢查、調試debug時會有非常好的效果,並且還可以有效提升你的代碼魯棒性!可能也是因爲筆者這種小錯誤犯得太多了,,,才深有體會。
以後再遇到類似的小技巧用法,再跟大家分享!
整理不易,謝謝點贊關注!!!