获取文件夹中文件的百分比

Getting a percentage of files in a folder

我写了一个脚本,我将它的一部分分配给 select 一个目录中 10% 的文件的随机样本,并将它们复制到一个新目录。这是我下面的方法,但它每次都不到 10% (~9.6%),而且永远不会相同。

for x in range(int(len(files) *.1)):
    to_copy = choice(files)
    shutil.copy(os.path.join(subdir, to_copy), os.path.join(output_folder))

这给了

#files source       run 1        run 2
29841               2852         2845
1595                152          156
11324               1084         1082

通过调用 random.choice() repeatedly, you are effectively choosing with replacement。这意味着您可能会在不同的循环中选择同一个文件两次。

请尝试 random.sample()

for to_copy in random.sample(files, int(len(files)*.1)):
    shutil.copy(...)

考虑这个程序:

import random

seq = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

for _ in range(5):
    i = random.choice(seq)
    print(i, end=' ')
print()
for i in random.sample(seq, 5):
    print(i, end=' ')
print()

这里有两个运行程序:

$ python x.py 
g f e c b 
c j b a d 
$ python x.py 
c e a a e 
j f e a i 

注意,在第二行的第一行运行 random.choice()随机选择了a两次和e两次。如果这些是文件名,则似乎只复制了 3 个文件。事实上,执行了五份副本,但冗余副本不会添加到文件计数中。当然,重复相同选择的次数是随机的,导致您看到不一致的行为。

另一方面,从 random.sample() 派生的第二行将永远不会有重复的元素,因为 random.sample() 选择 而无需替换。