Python - 一次移动10个文件

时间:2015-04-17 17:00:29

标签: python move

嗨,我是编程新手,请原谅我的无知。 我试图在任何情况下将dir A中的10个文件移动到B,但程序应该足够灵活,以便当源目录中的文件少于10个时,它不应该给出错误,而大部分文件都是错误的。 / p>

我正在使用的循环是。当目录

中有超过10个文件时,这种方法很有效
w =0
while w < 10:
    w =w+1
    apple = random.choice(os.listdir("/home/prabh00b/dakoat_wb_script/2"))
    o = ''.join(["/home/prabh00b/dakoat_wb_script/2/", apple])
    shutil.move(o,"/home/prabh00b/dakoat_wb_script/")

2 个答案:

答案 0 :(得分:5)

使用random.sample从目录列表中获取10个元素,而不是使用random.choice。这样做的好处是,您只需要调用os.listdir一次,而不需要循环10次只是为了选择一个新的随机元素。它还将始终为您提供不同的元素,因此您最终不会尝试将同一文件移动两次。

要处理少于10个文件的情况,您可以先检查目录列表的长度。我们可以通过获得最小值10或列表长度来很好地做到这一点(所以你最多得到10个元素)。

files = os.listdir('/home/prabh00b/dakoat_wb_script/2')
for fileName in random.sample(files, min(len(files), 10)):
    path = os.path.join('/home/prabh00b/dakoat_wb_script/2', fileName)
    shutil.move(path, '/home/prabh00b/dakoat_wb_script/')

答案 1 :(得分:0)

在这种情况下,poke的回答肯定是最好的。我想为学习目的提出一个替代方案。

当给定空序列时(即没有更多文件要移动时),

random.choice将引发IndexError异常。为了使代码有效,您可以捕获IndexError并按如下方式停止循环:

w =0
while w < 10:
    w =w+1
    try:
        apple = random.choice(os.listdir("/home/prabh00b/dakoat_wb_script/2"))
    except IndexError:
        # There are no more files to move. Exit the while loop.
        break
    o = ''.join(["/home/prabh00b/dakoat_wb_script/2/", apple])
    shutil.move(o,"/home/prabh00b/dakoat_wb_script/")