获取文件夹中文件的百分比
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()
选择 而无需替换。
我写了一个脚本,我将它的一部分分配给 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()
选择 而无需替换。