目录
由于笔者做图像处理较多,咱们就用读取文件夹内的所有图像文件为例,解决批量读取文件夹内文件的问题。我们用到的核心就是 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时会有非常好的效果,并且还可以有效提升你的代码鲁棒性!可能也是因为笔者这种小错误犯得太多了,,,才深有体会。
以后再遇到类似的小技巧用法,再跟大家分享!
整理不易,谢谢点赞关注!!!