代码之家  ›  专栏  ›  技术社区  ›  physlexic

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

  •  0
  • physlexic  · 技术社区  · 6 年前

    我编写了一个脚本,并将其中的一部分随机抽取目录中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
    
    1 回复  |  直到 6 年前
        1
  •  4
  •   Robᵩ    6 年前

    通过调用 random.choice() 反复地,您可以有效地选择 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 
    

    请注意,在第二次运行的第一行中 随机的选项() 随机选择的 a 两次和 e 两次如果这些是文件名,那么似乎只复制了3个文件。事实上,执行了五个拷贝,但多余的拷贝不会添加到文件计数中。当然,重复相同选择的数量是随机的,这会导致您看到的不一致行为。

    另一方面,第二行来自 随机的示例() 不会有重复的元素,因为 随机的示例() 选择 无需更换。