问题
下载了一个脚本,运行时报错: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
这个隐藏文件,所以要想解决这个错误,就按需过滤掉这个隐藏文件即可!