0 这个软件是做什么的呢?
软件设计初衷
如题,这个软件的功效就是自动化的数据均分。熟悉我的朋友应该知道,我是一个深度学习方向的本科炼丹新手,经常需要对一个大的数据进行分组然后下放到科研组的学弟学妹那里进行标注。这个过程是非常无趣的而且还会浪费大量的时间。虽然说写一个脚本去分数据并不难但是随便写一个然后不知道扔到哪了下一次又遇到又要写毕竟是非常无聊的过程,并且我科研小组内并非负责编程部分的前辈们也不一定具备这样的能力。因此,我决定直接写一个成型的GUI软件,来完成这个自动化过程。
本代码所需第三方依赖:wxpython
软件实现的功能
- 对一个数据文件夹下的所有文件夹进行遍历,并将特定格式的数据全部取出并分配。
- 实现对特定组数的分配。
1 遍历部分——DFS的Python实现
上级的老师或者前辈给我们下发数据的时候通常是未经处理的,一个文件夹中又有多个分级文件夹的状况。这个其实很好理解,毕竟在进炼丹炉之前数据分类分批存储是非常自然的事情。然而,在我们分发数据的时候,这些数据很有可能是并没有本质区别的,过多的分级只会让我们的效率变低。因此,我们需要将文件夹下的所有特定格式文件全部整理出来一次性分配完成。
这个工作其实就是一个非常简单的数据结构DFS算法。我在这里用了一个非常粗糙的实现方式,即代码中的 dfsDataGetter 函数。
def dfsDataGetter(self,path):
dirFiles = os.listdir(path)
for name in dirFiles:
fullPath = "{}/{}".format(path,name)
if(os.path.isdir(fullPath)):
self.dfsDataGetter(fullPath)
else:
if(name.split('.')[-1] in self.dataType):
self.dataGroup.append(fullPath)
2. 分配部分
通过第一步,我们已经准备好了数据并同意储存在了一个数组中,那么接下来就是将它分配进入各个组中了!
毫无疑问,这一步如果要用其他的语言实现那需要一点运算(比如算出余数然后整除分配再加,等等,当然也可能只是我见识少没意识到不需要如此)。但是既然我们选择了python,自然就要用点特色啦~
这里我直接运用了一些很基础的切片加for in,即代码中的dataDispen函数
def dataDispen(self, groupNum, groupNameSet):
for num in range(groupNum):
groupName = "{}{}".format(groupNameSet,num+1)
self.groupDict[groupName] = self.dataGroup[num::groupNum]
不得不说python真的非常优雅且干练啊:)
接下来就是将这个Dict中的每一张图片复制到目标文件夹啦~相信这一部分难不倒各位大神!
写在最后及完整代码和软件
python真的非常实用,但是要用来做GUI确实是有点点小烦恼啊= =,尤其是wxpython用起来其实并不开心qwq
所以接下来的工作就得是好好学习一下web了!这样才能最好利用python的强大功能做出美丽的程序!
完整代码和已经打包好的可执行软件点击此处