我想要形成一个优化的方法来根据文件名在x:y比率中分割文件名列表(很快举例)。这个文件列表是使用os.scandir获得的(更好的性能vs os.listdir,src:Python Docs scandir)。以预定义的比例分割文件名列表
实施例 -
文件(扩展名忽略) -
A_1,A_2,... A_10(这里A是文件名和1是该文件的样本数)
B_1 ,B_2,... B_10
等
比方说,X:Y的比例为7:3 所以我希望在不同列表中有70%的文件名(A_1..A7,B_1..B_7)和30%(A_8_A_10,B_8..B_10),第一个列表应该按顺序排列并不重要这意味着文件可以是A_1,A_9,A_5等,只要它们将列表1中的7个文件分割成列表2中的3个文件即可。
现在必须注意的是,该目录很大(约150k个文件)每种文件类型的样本都不尽相同,也就是说,文件名A的文件可能有1000个文件,也可能只有5个文件。另外还有大约400个独特的文件名。
这个当前的解决方案根本不应该被称为解决方案,因为它违背了每个文件名的准确比率的目的。目前,它正在以x:y比率分割fileObjects列表(基本上名称像A,数字1,文件A_1内的数据等),并利用这样一个事实,即使用条目时以任意顺序生成os.scandir。
ratio_number = int(len(list_of_fileObjects) *.7)
list_70 = list_of_fileObjects[:ratio_number]
list_30 = list_of_fileObjects[ratio_number:]
我这将至少是一个有效的解决方案的第二方法是分别创建列表为每个文件名(包括排序文件的整个列表),它在比分割和每个文件名执行此操作。我正在寻找更为pythonic /优雅的解决方案来解决这个问题。任何建议或帮助将不胜感激,特别是考虑到处理数据的大小。
有帮助的是知道为什么downvotes?我对这个论坛很陌生,特别提出了一些问题,需要鼓励一些研究和解释方法。这让我感到悲伤,更糟糕的是那些沮丧的人没有留下评论。 –