Python3: ValueError: invalid literal for int() with base 10: '.DS_Store' 解决方案

问题

下载了一个脚本,运行时报错:ValueError: invalid literal for int() with base 10: '.DS_Stroe',报错在:

for root, sub_folder, file_list in os.walk(data_dir):
	self.image_names += [os.path.join(root, file_path) for file_path in file_list
	random.shuffle(self.image_names) # 打乱
	# 例如image_name为./train/00001/2.png,提取00001就是其label
	self.labels = [int(file_name[len(data_dir):].split(os.sep)[0]) for file_name in self.image_names]

最后一句,转换为int时,int()函数报错。

原因

因为我这个电脑是mac,在其文件系统中,有一个隐藏的文件.DS_Store,所以在使用os.walk()得到的file_list或者os.listdir()遍历一个文件夹的时候,都会包含到这个隐藏的文件.DS_Store。很明显这个文件不能被转换为int。

解决方案

出现了这个错误,我们需要明确就是.DS_Store不能被转换为int。那么因为我这里是用来训练用的数据集,里边全部是.png后缀的图片,所以可以在遍历的时候加上一个if判断:

self.image_names += [os.path.join(root, file_path) for file_path in file_list if file_path.endswith('png')]

这样就过滤掉了.DS_Store这个隐藏文件,所以要想解决这个错误,就按需过滤掉这个隐藏文件即可!

你可能感兴趣的:(Python学习笔记)