You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

脚本抽取文件夹10%随机文件数量不符问题求助

问题根源:有放回抽样导致重复选中文件

嘿,这问题我太熟啦!你当前的代码用random.choice()循环抽样,这是有放回的随机选择——简单说就是同一个文件可能被选中好几次,但你只会复制它一次,最终实际复制的唯一文件数量自然会比int(len(files)*0.1)少,占比也就低于10%,而且每次重复的次数随机,所以每次结果数量都不一样。

看你给出的例子:29841个文件,预期要选2984个,但实际只复制了2852/2845个,差的那一百多个就是被重复选中的文件,因为已经复制过了,第二次选到就等于白选。

解决方案:用无放回抽样保证唯一选择

Python里专门有个函数解决这个问题:random.sample(),它会从列表里无放回地抽取指定数量的唯一元素,完美匹配你的需求。

修改后的代码如下:

import random
import os
import shutil

# 假设你已经获取了files列表、subdir和output_folder路径
target_count = int(len(files) * 0.1)
# 一次性选出target_count个不重复的文件
selected_files = random.sample(files, target_count)

# 逐个复制选中的文件
for filename in selected_files:
    src = os.path.join(subdir, filename)
    dest = os.path.join(output_folder, filename)
    shutil.copy(src, dest)
额外优化:更精确的抽样比例(可选)

如果你的文件总数乘以0.1后有小数,int()会直接向下取整(比如1595*0.1=159.5,int后是159)。如果想要更接近严格的10%,可以用round()来四舍五入:

target_count = round(len(files) * 0.1)

这样1595个文件就会选160个,占比160/1595≈10.03%,更接近预期。

内容的提问来源于stack exchange,提问作者physlexic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:04:59