glob.glob 函数读取文件

glob.glob(pathname) 返回所有匹配的文件路径列表。它只有一个参数 pathname,定义了文件路径匹配规则,这里可以是绝对路径,也可以是相对路径。

如当前路径下有文件如下:
在这里插入图片描述
* 返回当前路径下的所有文件路径

files = glob.glob('*')
files
'''

['a.ipynb',
 'data.py',
 'dataAugmentation.ipynb',
 'images',
 'test_predict.py',
 'unet.py',
 'unet_1_test.ipynb',
 'unet_with_predict.ipynb']
'''

files = glob.glob('*.py')
'''
['data.py', 'test_predict.py', 'unet.py']
'''

若想在上级目录中搜索文件,可使用 ../

f = glob.glob('../*') # 当前路径为 /images/
'''
['..\\a.ipynb',
 '..\\data.py',
 '..\\dataAugmentation.ipynb',
 '..\\images',
 '..\\test_predict.py',
 '..\\unet.py',
 '..\\unet_1_test.ipynb',
 '..\\unet_with_predict.ipynb']
'''

另外,在使用 glob.glob 时遇到了一个问题:这个函数返回的路径好像会自己加上一个 \ 反斜杠,因此与文件路径有冲突,导致无法正确读取文件(一般文件路径为 /path/xxx/...
比如想读取图片时:

path = "images/merge"
img_type = 'tif'
train_imgs = glob.glob(path+"/*."+ img_type)

然后这两种方式打印出的反斜杠数量还不一样…

对于第一种遍历方式取文件路径来读取图片,我是这样处理反斜杠的:

for imgname in train_imgs:
	#print('0000:',imgname)  --> 0000: images/aug_merge/0\0_0_1255.tif
	
	imgname = eval(repr(imgname).replace('\\', '/'))
	#print('1111:',imgname)  --> 1111: images/aug_merge/0//0_0_1255.tif
	
	imgname = imgname.replace('//','/')
	#print('2222:',imgname)   --> 2222: images/aug_merge/0/0_0_1255.tif
	
	img = cv2.imread(imgname) # 然后就能正常的读取图片了

对于 glob.glob 的一些实现细节我也没去关注,可能这是一种很笨的处理方式吧,总之能暂时满足我的需求。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值