从文件夹中提取随机文件以进行抽样

时间:2018-03-14 14:56:51

标签: python random sampling

我需要一种方法随机抽取文件夹中10%的文件,以便在每次运行后进行采样。"幸运的是,我当前的文件以数字和顺序编号。所以我目前的方法是列出文件名,解析数字部分,拉出最大值和最小值,计算文件数并乘以.1,然后用random.sample得到随机数[10%]样本。"我还将这些名称写入.txt,然后使用shutil.copy移动实际文件。

显然,如果我有一个异常值,这是行不通的,即如果我在345.txt的其他文件中有一个文件513.txt - 678.txt。我想知道是否有一个直接的方法来简单地从文件夹中随机拉出一些文件?我查了一下,找不到更好的方法。

感谢。

5 个答案:

答案 0 :(得分:2)

使用g_master <- data.frame(V = as.vector(V(g)), g_in, g_out, g_inclo, g_outclo, g_bet) head(g_master, 2) # V g_in g_out g_inclo g_outclo g_bet # 1 1 208 0 2.193608e-05 1.0001e-08 0 # 2 2 48 1 1.042957e-08 1.0002e-08 411 ,您可以从数组中随机选择numpy.random.choice(array, N)个项目。

N

答案 1 :(得分:1)

这将为您提供文件夹中的名称列表,其中mypath是文件夹的路径。

from os import listdir
from os.path import isfile, join
from random import shuffle
onlyfiles = [f for f in listdir(mypath) if isfile(join(mypath, f))]
shuffled = shuffle(onlyfiles)
small_list = shuffled[:len(shuffled)/10]

这应该有效

答案 2 :(得分:0)

您可以使用以下策略:

  1. 使用list = os.listdir(path)将目录中的所有文件作为路径列表。
  2. 接下来,使用range = len(list)函数计算文件。
  3. 使用range号码,您可以获得random_position = random.randrange(1, range)
  4. 之类的随机商品编号
  5. 重复步骤3并将值保存在列表中,直到您获得足够的位置(在您的情况下为范围/ 10)
  6. 之后,您可以获得所需的文件名称list[random_position]
  7. 使用循环for进行迭代。

    希望这有帮助!

答案 3 :(得分:0)

我无法使用其他方法轻松使用我的代码,但我想出了这个。

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

答案 4 :(得分:0)

基于Karl的解决方案(在Win 10,Python 3.x下对我不起作用),我想到了这一点:

SELECT ?root ?s ?value ?q0
WHERE
{
    VALUES ?root { <http://www.wikidata.org/entity/Q42> } .
    ?root <http://www.wikidata.org/prop/P69> ?s .
    ?s <http://www.wikidata.org/prop/statement/P69> ?value .
    ?s <http://www.wikidata.org/prop/qualifier/P582> ?q0.  
}